gpt4 book ai didi

java - 根据姓氏的字母顺序对用户输入的姓名进行排序

转载 作者:行者123 更新时间:2023-12-01 23:25:47 25 4
gpt4 key购买 nike

我自己完成了大部分代码(在一些谷歌搜索的帮助下),但我遇到了一个意想不到的问题。首先,我必须使用选择排序对用户输入的姓名列表按姓氏的字母顺序进行排序。这是我的代码:

    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

问题是,如果我首先使用名称初始化数组(而不接受用户的任何输入),代码就会正常运行并产生所需的结果。请问有什么帮助吗?

另外,因为我知道这里有些人对此非常挑剔,是的,这是一项家庭作业,是的,我自己完成了所有代码,我在谷歌上搜索了如何按字母顺序对名称进行排序,因为我无法准确地编码出我最初的想法。这是比较两个姓氏每个字符的 ASCII 值,看看哪个应该排在前面。例如: if((int) surname1.charAt(0)>(int) surname2.charAt(0)) 那么 surname2 应该出现在 surname1 之前,否则如果它们的第一个字符相同,则取第二个字符等等。

感谢您花时间阅读本文。

最佳答案

问题在于 in.nextInt() 命令它只读取 int 值。因此,当您使用 in.nextLine() 继续阅读时,您会收到 "\n" Enter 键。因此,要解决这个问题,您必须在进入循环之前添加额外的 in.nextLine() 。或者,使用另一个扫描仪

    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();

}

关于java - 根据姓氏的字母顺序对用户输入的姓名进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20028671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com