Я пытаюсь создать программу, которая принимает ввод пользователя и сортирует его по алфавиту, как это происходит при использовании 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;
}
}
С этим кодом возникает ряд проблем. Сначала я отвечу на ваш ближайший вопрос, затем перечисляю некоторые другие проблемы.
Метод 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
.Если вы собираетесь сортировать, как вы идете, структура данных TreeMap - это то, что вы должны использовать, а не массив. Однако, если вы хотите сортировать, как вы идете с массивом, вам нужно добавить некоторые строки в ваш else, если предложение в SortInsert (должно быть sortInsert, BTW). (Другой вопрос: почему это иначе, а не просто иначе?)
Строки должны создать новый массив размером больше, чем существующий массив, скопировать первые элементы 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;