2016-10-08 2 views
0

Я новичок в Java и пробую простые примеры для ознакомления с основами. Это программа, чтобы увидеть, равны ли три целых числа, заданные пользователем.Ошибка «не найти символ» в Java

import java.lang.*; 
import java.util.*; 
public class CheckEqual{ 

    public static void main(String [] args){ 
     if (args.length != 5){ 
      System.out.println("Please check the number of your integers!"); 
      return; 
     } 
     try{ 
      int firstInteger = Integer.parseInt(args[2]); 
      int secondInteger = Integer.parseInt(args[3]); 
      int thirdInteger = Integer.parseInt(args[4]); 
     } 
     catch(NumberFormatException e){ 
      System.out.println("Make sure that all inputs are integers!"); 
      return; 
     } 
     if (firstInteger == secondInteger && secondInteger == thirdInteger){ 
      System.out.println("True"); 
      return; 
     } 
     else{ 
      System.out.println("False"); 
      return; 
     } 
    } 

} 

Во время компиляции, он дал мне ошибку "не может найти символы" на firstInteger, secondInteger и thirdInteger. Почему это и как я могу это решить?

+0

объем переменной ограничивается блоком – silentprogrammer

+2

Вы не можете использовать '' firstInteger', secondInteger', 'thirdInteger' вне блока попробовать, это из объем. – Li357

+0

Релевантно - [Что подразумевается под областью переменной] (http://programmers.stackexchange.com/questions/141133/what-is-meant-by-scope-of-a-variable) –

ответ

2

Java использует рамки на каждой переменной. В принципе, если вы создаете переменную в блоке, если, например, следующее:

if(statement){ 
    int x = 1; 
} 

x++; 

переменная х существует только в объеме КРП блока. После этого он не существует. Это означает, что x ++ создаст ошибку, так как x не существует в этой области. То же самое относится к блоку try в вашем коде. firstInteger, secondInteger и thirdInteger не существуют вне блока try. Вы должны изменить код следующим образом:

import java.lang.*; 
import java.util.*; 
public class CheckEqual{ 

    public static void main(String [] args){ 
     if (args.length != 5){ 
      System.out.println("Please check the number of your integers!"); 
      return; 
     } 
     try{ 
      int firstInteger = Integer.parseInt(args[2]); 
      int secondInteger = Integer.parseInt(args[3]); 
      int thirdInteger = Integer.parseInt(args[4]); 

      if (firstInteger == secondInteger && secondInteger == thirdInteger){ 
       System.out.println("True"); 
       return; 
      } 
      else{ 
       System.out.println("False"); 
       return; 
      } 
     } 
     catch(NumberFormatException e){ 
      System.out.println("Make sure that all inputs are integers!"); 
      return; 
     } 
    } 
} 
2

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

import java.lang.*; 
    import java.util.*; 
    public class CheckEqual{ 

    public static void main(String [] args){ 
    int firstInteger,secondInteger,thirdInteger; 
    if (args.length != 5){ 
     System.out.println("Please check the number of your integers!"); 
     return; 
    } 
    try{ 
     firstInteger = Integer.parseInt(args[2]); 
     secondInteger = Integer.parseInt(args[3]); 
     thirdInteger = Integer.parseInt(args[4]); 
    } 
    catch(NumberFormatException e){ 
     System.out.println("Make sure that all inputs are integers!"); 
     return; 
    } 
    if (firstInteger == secondInteger && secondInteger == thirdInteger){ 
     System.out.println("True"); 
     return; 
    } 
    else{ 
     System.out.println("False"); 
     return; 
    } 
    } 

} 
0

Переменные, объявленные в блоке Try/поймать не в объеме в содержащем блоке, по той же причине, что все другие объявления переменных являются локальными по отношению к области, в которой они Это описание документации. По этой причине вы должны были объявить эти переменные вне блока try/catch для удобства использования в методе main().

0

Как правильно указано другими, что переменные int не входят в сферу действия. Я сделаю это простым для понимания.

Вариант 1: Использование если ... еще в Try ... Catch блок

try{ 
     int firstInteger = Integer.parseInt(args[2]); 
     // 
     if (firstInteger == secondInteger && secondInteger == thirdInteger){ 
      /// 
     } else { 
      // 
     } 
    } 
    catch(NumberFormatException e){ 
     System.out.println("Make sure that all inputs are integers!"); 
     //return; //not needed, you may skip this 
    } 

Вариант 2: объявить int переменные вне или до Try ... Catch блок

int firstInteger, ... ; 
    try{ 
     firstInteger = Integer.parseInt(args[2]); //no `int` keyword used ! 
     // 
    } 
    catch(NumberFormatException e){ 
     System.out.println("Make sure that all inputs are integers!"); 
     return; 
    }