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

#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. Меня очень раздражает, если упражнения по программированию имитируют тупой процесс.