姓に従ってアルファベット順にユーザーが入力したソート名
-
21-12-2019 - |
質問
私は自分で(少しグーグルの助けを借りて)、私はそのほとんどのコードを完成させましたが、予期しない問題に遭遇しました。ファーストオフ、私は選択並びを使用して、最後の名前の平文順に名前の入力された名前のリストをソートする必要があります。これが私のコードです:
import java.util.*;
class Name_Sort
{
public static void main (String args[])
{
Scanner in = new Scanner (System.in);
System.out.print ("Enter the number of names you wish to enter: ");
int n = in.nextInt();
String ar[] = new String [n];
for (int i = 0; i<ar.length; i++)
{
System.out.print("Please enter the name: ");
ar[i]= in.nextLine();
}
String temp;
for (int b = 0; b<n; b++)
{
for (int j=b+1; j<n; j++)
{
if ((compareLastNames(ar[b], ar[j]))>0)
{
temp = ar[b];
ar[b] = ar[j];
ar[j] = temp;
}
}
}
System.out.println ("The names sorted in alphabetical order are: ");
for (int a = 0; a<n; a++)
System.out.print (ar[a]+"\t");
}
private static int compareLastNames(String a, String b)
{
int index_a = a.lastIndexOf(" ");
String surname_a = a.substring(index_a);
int index_b = b.lastIndexOf(" ");
String surname_b = b.substring(index_b);
int lastNameCmp = surname_a.compareToIgnoreCase(surname_b);
return lastNameCmp;
}
}
.
問題(私は)私がユーザーから名前を付けているとき、具体的にはこの部分:
Scanner in = new Scanner (System.in);
System.out.print ("Enter the number of names you wish to enter: ");
int n = in.nextInt();
String ar[] = new String [n]; //Array to store the names in.
for (int i = 0; i<ar.length; i++)
{
System.out.println("Please enter the name: ");
ar[i]= in.nextLine();
}
.
BlueJの端末ウィンドウの出力は
として表示されますName_Sort.main({ });
Enter the number of names you wish to enter: 5
Please enter the name:
Please enter the name:
.
それが表示することになっているものではありません。私は何が間違っていることができますか?私はしばらくの間それを熟考しましたが、何も気にしません。
そして上記のエラーにもかかわらず、私が前進していくつかの名前を入力しても、ここでのコードのこの部分で別のエラーが発生します。
private static int compareLastNames(String a, String b)
{
int index_a = a.lastIndexOf(" ");
String surname_a = a.substring(index_a);// This is the line the compiler highlights.
int index_b = b.lastIndexOf(" ");
String surname_b = b.substring(index_b);
int lastNameCmp = surname_a.compareToIgnoreCase(surname_b);
return lastNameCmp;
}
.
エラーは次のとおりです。
java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (injava.lang.String)
.
これは、ホワイトスペースの文字" "
が存在しないことを意味しますか?しかし、なぜ?
端末ウィンドウのスクリーンショットです。 http://imgur.com/l7yf7xn
これは、最初に名前を付けて配列を初期化するだけで(ユーザーから入力を受けていない場合)、コードが正常に実行され、目的の結果が生成されます。どんな助けをしてください?
また、ここでいくつかの人々がこれについて非常に特別であることを知っているので、これは宿題の割り当てです、はい、私は自分ですべてのコードをしました私が持っていた元のアイデアを正確にコーディングできませんでした。
これは、2つの姓の各文字のASCII値を比較して、最初に来るべきだがわかりました。とおり:if((int) surname1.charAt(0)>(int) surname2.charAt(0))
はSurname2の前に姓1の前に来るべきです、それ以外の場合は同じ最初の文字が同じ場合は、2番目の文字などを取ります。
これを読んでくれてありがとう。
解決
問題は、int値のみを読み取るin.nextInt()
コマンドである。そのため、in.nextline()で読み続けるときは、"\n"
Enterキーを受け取ります。そのため、これを回避するために、ループに入る前に追加のin.nextLine()
を追加する必要があります。あるいは、別のscanner
を使用してください。
int n = in.nextInt();
String ar[] = new String [n]; //Array to store the names in.
in.nextLine(); // < --- an extra next Line
for (int i = 0; i<ar.length; i++)
{
System.out.println("Please enter the name: ");
ar[i]= in.nextLine();
}
.