первым делом String savedcities[] = new int[numcities];
можно изменить на String savedcities[] = new String[numcities];
При инициализации массивов в Java вы используете тот же тип после нового ключевого слова, что и массив, который вы хотите создать
например: Object[] myObjArray = new Object[size]
или int[] myIntArray = new int[size]
Во-вторых, измените свой оператор while с while (again.equals("y") );
на while (again.equals("n") );
или while (!again.equals("n") );
оператор while продолжает цикл до тех пор, пока условие выполняется. В этом случае, если пользователь вводит y
, цикл начинается снова. Однако, согласно тому, что вы сказали, цикл должен продолжаться только тогда, когда пользователь наберет n
В этом случае, для ясности, возможно, переименуйте again
в done
Также разместите объявление вашего массива вне do while, чтобы его можно было использовать вне do while.
String[] savedcities;
do {
.... your code...
//when you initialize the array do it like the following
savedCities = new String[numCities];
for (int i = 0;i < savedcities.length; i++)
{
...inside for loop....
}
... rest of do while ....
}
Теперь ваш последний выпуск с пропуском первой фазы выбора города немного сложен ...
когда программа достигает этих строк:
System.out.println("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
System.out.print("\nPlease enter the name of city #" + (i+1) + ": ");
savedcities[i] = k.nextLine();
на первом проходе есть строка для чтения. (Вы можете определить это, напечатав результаты k.hasNext()
)
Это потому, что k.nextInt()
читает целое число из консоли, но оставляет символ пробела позади. Этот символ пробела был напечатан на консоли, когда пользователь набирает номер, а затем нажимает клавишу ввода.
so k.nextLine()
читает этот символ пробела и вводит в первую точку города. Вы можете проверить это, запустив и режим отладки.
Есть несколько способов решить эту проблему. Один хакерский способ, которым я воспользовался, это позвонить k.nextLine()
после вызова k.nextInt()
Это эффективно вытянет символ пробела.
В качестве альтернативы вы можете попробовать прочитать всю строку, а затем проанализировать значение в целое число:
int numcities = Integer.parseInt(k.nextLine());
Последний раздел вашего кода перебирает сохраненные города:
for(int u=0; u<savedcities.length; u++)
{
System.out.println("Data at [" + u + "] = " + savedcities[u]);
}
но у вас уже есть arr[]
, который содержит все символы случайного города, который вы выбрали. Вместо этого зацикливайтесь на этом.