我正在尝试使用compareTo()
和方法String addSort(String name)
按字母顺序对名称数组进行排序,但是在“返回名称”行中编译时出现错误,说我的“变量”名称“可能尚未初始化”。
我已经制作了按字母顺序排序的方法和代码,当我使用compareTo()作为对数组进行排序的方式时,我认为应该是正确的。 (“ moreFriends”数组是一个新数组,当数组满时,它的大小是原始数组“ friends”的两倍)(请注意,这不是全部代码)
public class SimpleDataStructure{
private String [] friends;
private String [] moreFriends;
private int counter;
public SimpleDataStructure()
{
friends= new String[5];
counter=0;
}
public String addSort(){
String name;
for(int i = 0; i < moreFriends.length; i++){
for(int j = i + 1; j < moreFriends.length; j++){
if(moreFriends[i].compareTo(moreFriends[j]) > 0){
String temp = moreFriends[i];
moreFriends[i] = moreFriends[j];
moreFriends[j] = temp;
}
}
}
System.out.println("Names in sorted order:");
for(int i = 0; i < moreFriends.length -1; i++){
System.out.println(moreFriends[i]);
}
return name;
}
public static void main( String [] arg){
SimpleDataStructure sortedfriends = new SimpleDataStructure();
System.out.println(sortedfriends.addSort(name));
}
这是我尝试编译程序时收到的错误消息:
SimpleDataStructure.java:85: error: variable name might not have been initialized
return name;
^
1 error
当我期望输出最终是:
(unsorted)
Kalle
Bob
Carl
Alice
Lewis
(sorted)
Alice
Bob
Carl
Kalle
Lewis
答案 0 :(得分:1)
您需要像这样声明您的函数:
public String addSort(String name){
并删除字符串声明:
String name;
并且您不会为名称添加价值。
您可以使用以下方法解决您的问题:
String [] a="a","v","b";
Arrays.sort(a);
答案 1 :(得分:1)
出现编译错误的原因是,在尝试使用String name
之前,您从未为其设置值。
您应该像在描述addSort(String name)
中那样传递值。这将消除该错误。
我看不到为什么要在函数中返回String
的原因。
该功能似乎也没有添加传入的名称。
答案 2 :(得分:0)
希望这会有所帮助!
import java.util.*;
class SimpleDataStructure {
public String[] addSort(String moreFriends []) {
for (int i = 0; i < moreFriends.length; i++) {
for (int j = i + 1; j < moreFriends.length; j++) {
if (moreFriends[i].compareTo(moreFriends[j]) > 0) {
String temp = moreFriends[i];
moreFriends[i] = moreFriends[j];
moreFriends[j] = temp;
}
}
}
return moreFriends;
}
public static void main(String[] arg) {
Scanner input=new Scanner(System.in);
SimpleDataStructure sortedFriends = new SimpleDataStructure();
String [] name =new String[5];
System.out.println("Enter name(s): ");
for (int i = 0; i < name.length; i++) {
name[i]=input.nextLine();
}
System.out.println("Unsorted:");
System.out.println(Arrays.toString(name));
System.out.println("Sorted:");
System.out.println(Arrays.toString(sortedFriends.addSort(name)));
}
}
如果您希望名称逐行打印出来,只需创建一个for循环即可,而不是 Arrays.toString
或者您甚至可以使用 Arrays.sort ,它要简单得多
import java.util.Arrays;
class SimpleDataStructure {
public String[] addSort(String moreFriends []) {
for (int i = 0; i < moreFriends.length; i++)
Arrays.sort(moreFriends);
return moreFriends;
}
public static void main(String[] arg) {
SimpleDataStructure sortedFriends = new SimpleDataStructure();
String [] name ={"Kalle", "Bob","Carl","Alice", "Lewis"};
System.out.println("Unsorted:");
System.out.println(Arrays.toString(name));
System.out.println("Sorted:");
System.out.println(Arrays.toString(sortedFriends.addSort(name)));
}
}
答案 3 :(得分:0)
我在课堂上将数组“ friends”和“ moreFriends”更改为static。 现在我在主程序中调用我的方法时,我的代码看起来像这样:
SimpleDataStructure sorted = new SimpleDataStructure();
System.out.println("Sorted:");
System.out.println(Arrays.toString(sorted.addSort()));
这是我的方法:
public String[] addSort() {
for (int i = 0; i < moreFriends.length; i++) {
for (int j = i + 1; j < moreFriends.length; j++) {
if (moreFriends[i].compareTo(moreFriends[j]) > 0) {
String temp = moreFriends[i];
moreFriends[i] = moreFriends[j];
moreFriends[j] = temp;
}
}
}
return moreFriends;
}
但是我现在收到此错误消息:
Unsorted:
Kalle Bob Carl Alice Lewis
Sorted:
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.compareTo(Unknown Source)
at SimpleDataStructure.addSort(SimpleDataStructure.java:75)
at SimpleDataStructure.main(SimpleDataStructure.java:108)
答案 4 :(得分:0)
您需要在addSort内包含变量名称,该名称用于保存名称。
SimpleDataStructure sorted = new SimpleDataStructure();
System.out.println("Sorted:");
System.out.println(Arrays.toString(sorted.addSort(**HERE**)));