Как я могу исправить ошибку, чтобы я мог использовать сортировку вставки

#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. Область цикла

Если мы объявим переменную внутри цикла, она будет иметь область действия цикла и будет доступна только внутри цикла:

Комментарии:

1. Привет @Manuj, пожалуйста, обновите свой ответ, включив в него цитату со страницы, на которую вы ссылались, — чтобы в случае, если эта страница пропадет, понимание, которое вы пытаетесь предложить, не было потеряно.

2. Привет, спасибо за отзыв, я не использовал цитату со страницы, я оставил ее там, если они захотят подробнее прочитать о области видимости в java.