2014-01-15 3 views
0

Я новичок в java, и у меня вопрос супер n00bish. (У меня есть некоторые общие знания в области программирования). Я пытаюсь получить доступ к переменной «item» безрезультатно. Может кто-нибудь понять почему?Java - переменная область

public void start() 
    { 
     Scanner input = new Scanner(System.in); 

     System.out.println("Enter saleman's name: "); 
     String name = input.next(); 

     int exit = 0; 
     do 
     { 
      System.out.println("Enter item number: "); 
      String item = input.next(); 
      if (ValidateItem(item) == true) 
      { 
       if (Integer.parseInt(item) <=4 && Integer.parseInt(item) >=1)\ 
       { 
        exit = 1; 
       } 
       else 
        System.out.println("Enter an item number between 1 and 4"); 
      } 

      if (ValidateItem(item) == false) 
      { 
       System.out.println("Enter an item number between 1 and 4"); 
      } 

     } while (exit == 0); 

     int exitQuan = 0; 
     do 
     { 
      System.out.println("Enter quantity (1-99): "); 
      String quant = input.next(); 
      if (ValidateItem(quant) == true) 
      { 
       exitQuan = 1; 
      } 
      else 
       System.out.println("Enter a quantity between 1 and 99"); 
     } 
     while (exitQuan == 0); 

     if (item == 1) 
     { 
      pay = 239.99; 
     } 

Последнее, что я хочу сказать, где мне не хватает области. Спасибо.

+2

Объявите переменную в большем объеме. В настоящий момент его область действия является первым блоком do-while. –

+0

Пожалуйста, отформатируйте свой код в соответствии с соглашениями по кодированию Java. –

+0

Вам очень нужно учиться, как форматировать код ... Кроме того, не отправляйте наподобие половины метода. – Vallentin

ответ

1

Объявить переменную Item вне цикла do-while.

int exit = 0; 
String item = null; 
    do { 
    System.out.println("Enter item number: "); 
    itm = input.next(); 
0

Вы объявили пункт в первом do-while цикле, вы не можете использовать его во втором, потому что, когда поток управления существует с первого цикла, item выходит из области видимости.

Кроме того, как другие предложили, собственно intentation помогли бы вам много ;-)

3

Область видимости переменной простирается только до мельчайшей пары скобок, которые окружают заявление. Например:

//this could be a method body, an if statement, a loop, whatever 
{ 
    int x; 
} //x passes out of scope here 

Таким образом, при объявлении item внутри do-while цикла, сфера его применения заканчивается после выхода из цикла. Чтобы исправить это, объявить item выше цикла, как это:

String item = null; //initialize to null to avoid warning about using an un-initialized variable 

do { 
    System.out.println("Enter item number: "); 
    item = input.next(); 

    //rest of loop... 

} while (exit == 0); 

Этот путь item будет доступен до возврата метода.

0

переменный элемента объявлен в первом дел в то время как петля Следовательно, вы можете получить доступ к нему внутри делам в то время как петля Чтобы получить доступ к элементу в области видимости функции, вы должны объявить его перед делать во время цикла, так что она может быть доступна, если в пункте (== 1) оператор

0
int exit = 0; 
String item = null; 
do { 
System.out.println("Enter item number: "); 
item = input.next(); 
if (ValidateItem(item) == true){ 
    if (Integer.parseInt(item) <=4 && Integer.parseInt(item) >=1){ 
     exit = 1;} 
else System.out.println("Enter an item number between 1 and 4"); 
} 
if (ValidateItem(item) == false){ 
    System.out.println("Enter an item number between 1 and 4");} 
} while (exit == 0); 

int exitQuan = 0; 
do { 
System.out.println("Enter quantity (1-99): "); 
String quant = input.next(); 
if (ValidateItem(quant) == true){ 
      exitQuan = 1;} 
    else System.out.println("Enter a quantity between 1 and 99"); 
} while (exitQuan == 0); 
0

переменная item имеет область к петле do while она определена в.

int exit = 0; 
String item = null; // <-- Add this 

затем изменить ваш цикл

do { 
    System.out.println("Enter item number: "); 
    item = input.next(); // <-- Defined outside this scope now. 
    if (ValidateItem(item) == true) { 
     if (Integer.parseInt(item) <= 4 && Integer.parseInt(item) >= 1) { 
      exit = 1; 
     } else { 
      System.out.println("Enter an item number between 1 and 4"); 
     } 
    } else { // <-- just use else 
     // if (ValidateItem(item) == false) { 
     System.out.println("Enter an item number between 1 and 4"); 
    } 
} while (exit == 0); 
0

В Java переменные являются локальными (объявленная внутри метода или в конструкторе) или переменная экземпляра (объявленные внутри класса, но вне метода). В вашем случае предмет живет только в первом, пока вы не можете получить доступ к нему за пределами цикла. Сделайте объявление элемента вне do-while (глобальная переменная). Я рекомендую использовать методы в Java (мы находимся в ООП не в процедурной парадигме). Удачи!

0

Не будет никаких проблем, если он знает, что основная Java сфера правил

1- Область действия декларации параметра является телом методы, в котором декларация появляется

2- сфера охват объявления локальной переменной - это точка, в которой декларация появляется до конца этого блока.

3 Область видимости локальной переменной, которая появляется в разделе инициализации заголовка оператора for, представляет собой тело оператор for и другие выражения в заголовке

4- Метод или сфера месторождения является всем тело класса

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

Смежные вопросы