#java #variables #duplicates #local
#java #переменные #дубликаты #Местные новости
Вопрос:
Я пытаюсь решить задание (я все еще новичок в Java) и перебрал множество ресурсов для решения этого конфликта, но все еще не могу его решить.(ПРИМЕЧАНИЕ: тунец — это моя переменная сканера)
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.Ошибка: нерешенная проблема компиляции: подсчитано дублирование локальной переменной
Проблема, которую я должен решить, заключается в:
Напишите программу для чтения в числе и суммируйте все числа от 1 до этого числа. Например, если пользовательский ключ в 6, то вывод 21 (1 2 3 4 5 6).
ДОБАВЛЕНО: Я прочитал вопрос (), который довольно похож, но я не допустил ошибку smae, объявив ее раньше.
Ответ №1:
Вы объявляете две переменные с одинаковым именем в одной и той же области видимости: counted
объявляется вне цикла и внутри цикла. Кстати, согласно вашей спецификации:
Напишите программу для чтения в числе и суммируйте все числа от 1 до этого числа. Например, если пользовательский ключ в 6, то вывод 21 (1 2 3 4 5 6)
вам не нужна первая counted
переменная, потому что это константа (константа 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
вне цикла. Результат не изменится. Однако обычной практикой является объявление переменной, которую for loop
использует в качестве индекса (вы можете вызвать эту переменную index
или counter
или i
или mySisterIsCool
и так далее) внутри самого цикла for (точнее, в его защите) для лучшей читаемости.
Комментарии:
1. Извините, что спрашиваю, поскольку я новичок в Java, что такое index? (index=STARTING_NUMBER;index<=counted;index ) Если это переменная, разве она не должна быть объявлена?
2. ‘index’ — это переменная, подобная ‘counted’ или ‘sum’. Вы объявляете ее внутри цикла for и, согласно коду, ‘index’ принимает значения от STARTING_NUMBER до ‘counted’ .
3. Я мог бы также сделать: ‘INT подсчитано, сумма, индекс;’ а затем, в цикле for, напишите: ‘for(index = STARTING_NUMBER; index<=подсчитано; index )’
4. Таким образом, это означает, что мы объявляем переменные внутри цикла For, если вы это имеете в виду. Я прав? Заранее спасибо!
Ответ №2:
В 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, и он будет отображаться на вашей консоли только один раз.
Комментарии:
1. Что вы имеете в виду под «оно будет отображаться на вашей консоли только один раз».? Извините за вопрос.
2. Я помещаю sout (System.out.println) вне цикла for. Вот почему ваш результат будет отображаться только один раз, а не в цикле.
Ответ №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);
}
если вы хотите использовать ранее объявленную переменную
Ответ №4:
Проблема в том, что вы дважды объявили значение int «подсчитанным». Один раз в верхней части кода и один раз внутри цикла for . Удаление объявления int из цикла for должно исправить это, например:
for(counted=0;counted<=counted1;counted )
Комментарии:
1. Ценю, что вы ответили на мой вопрос!
Ответ №5:
Действительно, вы объявили переменную counted
вне цикла и как счетчик цикла, поэтому эти 2 переменные с одинаковым именем находятся в одном блоке (часть кода между {
и }
.
Вы должны либо избегать объявления этой переменной вне цикла (если она вам нужна только как счетчик цикла), либо объявить ее вне цикла, а затем использовать ее в цикле следующим образом:
for(;counted<=counted1;counted )
Комментарии:
1. Они не находятся в одной области видимости.
for
вводит новую область видимости.
Ответ №6:
В Java должна соблюдаться область действия локальных переменных. Чтобы исправить это, переименуйте «counted» в операторе for .
Что касается проблемы: проверьте http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss#Anecdotes
Комментарии:
1. Интересное чтение, хотя и не очень актуальное. Тем не менее, спасибо, что ответили на мой вопрос!
2. Меня очень раздражает, если упражнения по программированию имитируют тупой процесс.