Дублирующая локальная переменная (для циклов)

java variables duplicates local

5405 просмотра

6 ответа

Я пытаюсь решить задание (я все еще очень плохо знаком с Java) и пролистал множество ресурсов, чтобы разрешить этот конфликт, но все еще не могу разобраться с ним (ПРИМЕЧАНИЕ. Tuna - моя переменная Scanner)

    int counted, sum, counted1;


    System.out.print("Enter your number to be calculated: ");
    counted = tuna.nextInt();
    counted1 =tuna.nextInt();


    for(int counted=0;counted<=counted1;counted++){
        System.out.println("The sum is: "+ counted);
    }
}

}

Результат: Исключение в потоке "main" java.lang.Error: Неразрешенная проблема компиляции: подсчитана повторяющаяся локальная переменная

Проблема, которую я должен решить:

Напишите программу для чтения числа и суммируйте все числа от 1 до этого числа. Например, если пользователь вводит 6, тогда вывод равен 21 (1 + 2 + 3 + 4 + 5 + 6).

ДОБАВЛЕНО: Я прочитал вопрос (), который довольно похож, но я не сделал ошибку smae, объявив ее раньше.

Автор: user3744056 Источник Размещён: 12.11.2019 09:43

Ответы (6)


5 плюса

Решение

Вы объявляете две переменные с одинаковым именем в одной и той же области видимости: countedобъявляется вне цикла и внутри цикла. Кстати, согласно вашей спецификации:

Напишите программу для чтения числа и суммируйте все числа от 1 до этого числа. Например, если пользователь вводит 6, то вывод равен 21 (1 + 2 + 3 + 4 + 5 + 6)

вам не нужен первый countedvar, потому что это константа (константа 1). Таким образом, вы можете объявить 1 как константу следующим образом:

final int STARTING_NUMBER = 1

и затем используйте эту константу в вашем цикле:

int counted, sum;
counted = tuna.nextInt();    

for(int index=STARTING_NUMBER;index<=counted;index++){
    sum=sum+index;
}
System.out.println("The sum is: "+ sum);

РЕДАКТИРОВАТЬ: вы можете объявить свои переменные, где вы хотите. Важно то, что вы объявляете их один раз в одной области. Вы можете сделать что-то вроде:

int counted, sum, index;
counted = tuna.nextInt();    

for(index=STARTING_NUMBER;index<=counted;index++){
    sum=sum+index;
}
System.out.println("The sum is: "+ sum);

объявив indexвне цикла. Результат не изменится. Это общая pratice, хотя, чтобы объявить переменную , что for loopиспользование в качестве индекса (вы можете назвать эту переменную indexили counterили iили mySisterIsCoolи так далее) внутри для самого цикла (в настороже, чтобы быть более точным) для лучшей читаемости.

Автор: superpuccio Размещён: 16.06.2014 08:43

5 плюса

В Java (в отличие от C ++) ваши локальные переменные не могут иметь того же имени, что и объявленные ранее переменные, если они находятся в одном диапазоне, например

{  //external variable
    int x;
    { //internal variable
        int x;
        //do something
    }
}

Вы не сможете скомпилировать этот код.

В вашем примере вы должны сделать что-то вроде этого:

int counted, sum;


System.out.print("Enter your number to be calculated: ");
counted = tuna.nextInt();


for(int counter=0;counter<=counted;counter++){
    sum=sum+counter;
}
System.out.println("The sum is: "+ sum);
}          

Результат будет в переменной sum и будет отображаться на вашей консоли только один раз.

Автор: PatNowak Размещён: 16.06.2014 08:38

3 плюса

for(int counted=0;counted<=counted1;counted++){
    System.out.println("The sum is: "+ counted);
}

здесь вы повторно объявляете int с тем же именем, которое уже существует. использовать что-то вроде:

for(int counted1=0;counted1<=counted1;counted1++){
    System.out.println("The sum is: "+ counted1);
}

или же

for(counted=0;counted<=counted1;counted++){
    System.out.println("The sum is: "+ counted);
}

если вы хотите использовать ранее объявленную переменную

Автор: Stultuske Размещён: 16.06.2014 08:31

3 плюса

Проблема в том, что вы объявили int "посчитано" дважды. Один раз в верхней части кода и один раз внутри цикла for. Удаление объявления int из цикла for должно исправить это, например:

for(counted=0;counted<=counted1;counted++)
Автор: Revive Размещён: 16.06.2014 08:33

2 плюса

Действительно, вы объявили переменную countedвне цикла и в качестве счетчика цикла, поэтому эти 2 переменные с одинаковым именем находятся в одном блоке (часть кода между {и }.

Вам следует либо избегать объявления этой переменной вне цикла (если она нужна только в качестве счетчика цикла), либо объявлять ее вне цикла, а затем использовать ее в цикле следующим образом:

for(;counted<=counted1;counted++)
Автор: AlexR Размещён: 16.06.2014 08:32

2 плюса

В Java область локальных переменных должна соблюдаться. Чтобы это исправить, переименуйте «count» в операторе for.

Что касается проблемы: проверьте http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss#Anecdotes

Автор: laune Размещён: 16.06.2014 08:34
Вопросы из категории :
32x32