#java #for-loop #debugging #insertion-sort
#java #для цикла #отладка #вставка-сортировка
Вопрос:
Я пытался создать случайный массив, который принимает пользовательский ввод и печатает такое количество случайных значений
например, если я введу 5, это создаст массив [3,4,5,6,6]
а затем я попытался использовать сортировку вставки, чтобы она могла переставлять значения в правильном порядке от наименьшего значения к наибольшему значению, однако я продолжал получать эту ошибку
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
j cannot be resolved to a variable
и эта ошибка была в строке result[j 1] = key;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter Size of Random Number");
int n = input.nextInt();
Random random = new Random();
int[] result = random.ints(n, 0, 10).toArray();
Arrays.stream(result).forEach(System.out::print);
System.out.println("n");
int len = result.length;
for(int i=1; i<len; i ) {
int key = result[i];
for (int j=i-1; (j >= 0 amp;amp; result[j] > key); j--) {
result[j 1] = result[j];
}
result[j 1] = key;
System.out.println(Arrays.toString(result));
}
}
}
Комментарии:
1.
j
существует только в цикле, в котором он объявлен.2. я попытался вернуть ее в цикл, однако она не выполняла сортировку вставки
3. Если вам это нужно вне цикла, то объявите его вне цикла.
Ответ №1:
for(int i=1; i<len; i ) {
int key = result[i];
int j;
// you should declare a variable outside of the for loop in such cases,
// because if you declare it within the for loop it will be locally scoped within that for loop and not available outside it.
for (j=i-1; (j >= 0 amp;amp; result[j] > key); j--) {
result[j 1] = result[j];
}
result[j 1] = key;
System.out.println(Arrays.toString(result));
}
Вы можете прочитать больше о области видимости здесь .
- Область цикла
Если мы объявим переменную внутри цикла, она будет иметь область действия цикла и будет доступна только внутри цикла:
Комментарии:
1. Привет @Manuj, пожалуйста, обновите свой ответ, включив в него цитату со страницы, на которую вы ссылались, — чтобы в случае, если эта страница пропадет, понимание, которое вы пытаетесь предложить, не было потеряно.
2. Привет, спасибо за отзыв, я не использовал цитату со страницы, я оставил ее там, если они захотят подробнее прочитать о области видимости в java.