Почему я не могу напечатать переменную, предоставленную пользователем внутри цикла?

1

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

Эта программа предназначена для того, чтобы сделать 2 целых числа от пользователя и распечатать их, но мне как-то удалось испортить это.

import java.util.Scanner;

public class Exercise2
{   
    int integerone, integertwo; //putting ''static'' here doesn't solve the problem
    static int number=1;
    static Scanner kbinput  = new Scanner(System.in);
    public static void main(String [] args)     
    {
        while (number<3){
            System.out.println("Type in integer "+number+":");
            if (number<2)
            {
                int integerone = kbinput.nextInt(); //the integer I can't access
            }
            number++;
        }
        int integertwo = kbinput.nextInt();
        System.out.println(integerone); //how do I fix this line?
        System.out.println(integertwo);
    }
}

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

EDIT: Я хочу использовать цикл здесь, чтобы исследовать несколько способов делать то, что это предназначено.

Теги:

2 ответа

7
Лучший ответ

Удалите ключевое слово int при использовании той же переменной во второй раз. Потому что, когда вы это делаете, он по существу объявляет другую переменную с тем же именем.

static int integerone, integertwo; // make them static to access in a static context
... // other code
while (number<3){
    System.out.println("Type in integer "+number+":");
    if (number<2)
    {
       integerone = kbinput.nextInt(); //no int keyword
    }
    number++;
}
integertwo = kbinput.nextInt(); // no int keyword

И он также должен быть static так как вы пытаетесь получить к нему доступ в статическом контексте (то есть) в основном методе.


Другой вариант - объявить его внутри метода main() но до того, как ваш цикл начнется, чтобы он был доступен по основному методу (как это предлагает "Патриция Шанахан").

public static void main(String [] args) {
    int integerone, integertwo; // declare them here without the static
    ... // rest of the code
}
  • 3
    Ему также нужно сделать статическое целое число. В противном случае, это было бы вне области. Он обращается к нему из метода main() .
  • 3
    Или объявите это внутри main, но вне цикла.
0

Как насчет:

import java.util.Scanner;

 public class Main {

   public static void main(String[] args) {
        Scanner kbinput  = new Scanner(System.in);

        System.out.println("Type in an integer: ");
        int integerone = kbinput.nextInt();

        System.out.println("Type another: ");
        int integertwo = kbinput.nextInt();

        System.out.println(integerone);
        System.out.println(integertwo);    
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню