Как исправить, что моя программа java не перестает работать? - PullRequest
0 голосов
/ 07 мая 2020

Я пишу простую программу в качестве практики для Java. Он принимает целые числа и помещает их в двумерный массив из R строк и C столбцов, а затем просто распечатывает каждый элемент массива (только для устранения неполадок). Когда я запускаю код, он печатает каждое целое число, как и должно, но программа не останавливается. Я должен заставить это прекратить. Почему он не останавливается сам по себе? Я попробовал выполнить базовую отладку c и попытался проверить, не было ли у меня случайно бесконечное число l oop в коде, но я не смог его найти.

В случае, если это важно, я использую IntelliJ Idea Ultimate 2019.3.

Спасибо

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt(); //Takes number of test cases
        for(int i = 1; i <= T; i++){ //This is the counter for each test case
            int R = in.nextInt(); //R is # of rows
            int C = in.nextInt(); //C is # of columns
            int K = in.nextInt(); //K is the thickness allowed
            int numArray[][] = new int[R+1][C+1];

            for(int j = 0; j < R; j++){
                for(int k = 0; k < C; k++){
                    numArray[j][k] = in.nextInt();
                    System.out.println(numArray[j][k]);
                }
            }

        }
        in.close();
    }//End of main
}//End of main class

Изменить: для справки в будущем я буду включать входные и выходные данные. получал.

Ввод: 3 1 4 0 3 1 3 3 2 3 0 4 4 5 7 6 6 4 5 0 2 2 4 4 20 8 3 3 3 12 6 6 3 3 3 1 6 8 6 4

Вывод: 3 1 3 3 4 4 5 7 6 6 2 2 4 4 20 8 3 3 3 12 6 6 3 3 3 1 6 8 6 (а здесь курсор застрял, мигает, ничего не делает, и программа не не уйти сам по себе)

Я решил проблему, набрав ввод вручную вместо того, чтобы копировать и вставлять его. Не уверен, что вызвало эту проблему, но это сработало!

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Этот небольшой фрагмент кода требует, чтобы пользователь ввел 3 целых числа (R, C и K) T -times:

int T = in.nextInt(); 
for(int i = 1; i <= T; i++){
    int R = in.nextInt(); 
    int C = in.nextInt();
    int K = in.nextInt(); 
    // ...
}

Кроме того, пользователь должен ввести целое число R*C - раз до i <= T:

for(int j = 0; j < R; j++){
    for(int k = 0; k < C; k++){
        numArray[j][k] = in.nextInt(); // << requires user-interaction each loop here >>
        System.out.println(numArray[j][k]);
    }
}

Если вы используете T = 1, R = 1, C = 1, K = 1, пользователь должен введите только 1 дополнительное целое число, так как есть только 1 повторение теста и R*C = 1. После этого ваша программа завершится, как и ожидалось.

При больших значениях T, R, C, K требуемые взаимодействия с пользователем растут экспоненциально, что, вероятно, заставляет вас думать, что ваша программа должна была закончиться, но она все еще ждет дополнительных пользовательский ввод.

0 голосов
/ 08 мая 2020

Хорошо, я думаю, что понял проблему. Я копировал и вставлял тестовые данные с веб-страницы. Я попробовал дважды проверить, чтобы убедиться, что введенные данные действительны, а затем ввел их вручную и исправил. Не 100% почему, но это решает проблему. Спасибо за помощь!

0 голосов
/ 07 мая 2020

ваш for (int i = 1; i <= T; i ++), вероятно, более новый заканчивается, потому что вы увеличиваете T. </p>

Для выхода вам нужно сделать какое-то условие в l oop. Например, если (xx == yy) break;

...