我正在尝试创建一个程序,该程序接受用户输入并按字母顺序对其进行排序,因为它使用compareTo
String
操作(而非array.sort
)并打印最终排序的数组结束。我已经解决了这个问题的大部分问题但是一旦我进入sort函数就丢失了。有没有人对我如何能够完成SortInsert
方法有任何想法?
import java.util.*;
public class SortAsInserted {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int array_size = GetArraySize();
String[] myArray = new String[array_size];
for (int i = 0; i < array_size; i++){
String nextString = GetNextString();
String[] sortedArray = SortInsert(nextString, myArray);
}
PrintArray(sortedArray);
}
input.close();
}
}
public static String[] SortInsert(String nextString, String[] myArray){
for(int i = 0; i < myArray.length;)
if (nextString.compareToIgnoreCase(myArray[i]) > 0) {
i++;
//if current text is less(alphabetically) than position in Array
}else if (nextString.compareToIgnoreCase(myArray[i]) < 0){
}
}
public static int GetArraySize(){
Scanner input = new Scanner(System.in);
System.out.print("How many items are you entering?: ");
int items_in_array = input.nextInt();
return items_in_array;
}
public static void PrintArray(String[] x) {
for (int i = 0; i < x.length; i++){
System.out.print(x[i]);
}
}
public static String GetNextString(){
Scanner input = new Scanner(System.in);
System.out.println("Enter the next string: ");
String next_string = input.nextLine();
return next_string;
}
}
答案 0 :(得分:1)
此代码存在许多问题。首先,我会回答你的问题,然后列举其他一些问题。
SortInsert
方法需要使用String[]
值初始化的null
,因此您需要考虑这一点。 for
循环看起来像这样。 (我正在使用注释而不是编写实际代码,因为我没有做项目)
for (int i=0; i<myArray.length; ++i) {
if (myArray[i] == null) {
// we found a blank spot. use it to hold nextString.
break;
} else if (nexString.compareToIgnoreCase(myArray[i]) < 0) {
// nextString should be in spot i, so make room for it
// by shuffling along whatever is in the array at "i" and later
// by one place, then put nextString into position "i"
break;
}
// otherwise we'll just move to the next position to check
}
现在针对其他问题。
Scanner
中的main
对象从未使用过。如果你的其他方法都是自己的,那么拥有它并在最后关闭它是没有意义的。myArray
将始终是已排序的数组,因此制作名为sortedArray
的局部变量并从SortInsert
返回它没有意义。请注意,您尝试打印sortedArray
无论如何都会失败,因为该局部变量仅在for
循环中的范围内。myArray
传递给PrintArray
。答案 1 :(得分:0)
如果您要按照自己的方式进行排序,那么您应该使用TreeMap数据结构,而不是数组。但是,如果要对数组进行排序,则需要在SortInsert中的else if子句中添加一些行(应该是sortInsert,BTW)。 (另一个问题:为什么不是其他而不是其他?)
这些行应该创建一个比现有数组大1的新数组,将旧数组的第一个i-1元素复制到新数组,将新元素放在位置i,然后复制其余元素旧数组在新数组中的位置更大。
答案 2 :(得分:0)
找到要插入的位置后,必须将所有以下元素向下移动一个。如下所示:
String temp = array[position];
for (int j = position+1; j < array_size-1; j++) {
String temp2 = array[j];
array[j] = temp;
temp = temp2;
}
array[array_size-1] = temp;