在 Java 中对插入数组的字符串进行排序
Sorting Strings as inserted into array in Java
我正在尝试创建一个程序,该程序接受用户输入并在使用 compareTo
String
操作(不是 array.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;
}
}
如果您要随时排序,您应该使用 TreeMap 数据结构,而不是数组。但是,如果您想在使用数组时进行排序,则需要在 SortInsert 的 else if 子句中添加一些行(顺便说一句,应该是 sortInsert)。 (另一个问题:为什么是 else if 而不是 else?)
这些行应该创建一个比现有数组大一号的新数组,将旧数组的前 i-1 个元素复制到新数组,将新元素放在位置 i,然后复制剩余的元素旧数组的位置在新数组中大一。
找到要插入的位置后,必须将以下所有元素向下移动一位。类似于以下内容:
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;
这段代码有很多问题。首先我会回答你的直接问题,然后列举一些其他问题。
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
}
现在讨论其他问题。
- 您在
main
中有一个从未使用过的 Scanner
对象。如果您的其他方法是自己制作的,那么拥有它并在最后关闭它是没有意义的。
myArray
将始终是排序后的数组,因此没有必要从 SortInsert
中创建一个名为 sortedArray
和 return 的局部变量。请注意,您尝试打印 sortedArray
无论如何都会失败,因为该局部变量仅在 for
循环的范围内。
- 打印时应该
myArray
传递给 PrintArray
。
我正在尝试创建一个程序,该程序接受用户输入并在使用 compareTo
String
操作(不是 array.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;
}
}
如果您要随时排序,您应该使用 TreeMap 数据结构,而不是数组。但是,如果您想在使用数组时进行排序,则需要在 SortInsert 的 else if 子句中添加一些行(顺便说一句,应该是 sortInsert)。 (另一个问题:为什么是 else if 而不是 else?)
这些行应该创建一个比现有数组大一号的新数组,将旧数组的前 i-1 个元素复制到新数组,将新元素放在位置 i,然后复制剩余的元素旧数组的位置在新数组中大一。
找到要插入的位置后,必须将以下所有元素向下移动一位。类似于以下内容:
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;
这段代码有很多问题。首先我会回答你的直接问题,然后列举一些其他问题。
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
}
现在讨论其他问题。
- 您在
main
中有一个从未使用过的Scanner
对象。如果您的其他方法是自己制作的,那么拥有它并在最后关闭它是没有意义的。 myArray
将始终是排序后的数组,因此没有必要从SortInsert
中创建一个名为sortedArray
和 return 的局部变量。请注意,您尝试打印sortedArray
无论如何都会失败,因为该局部变量仅在for
循环的范围内。- 打印时应该
myArray
传递给PrintArray
。