2015-10-09 2 views
0

Мне нужно создать код с двумя методами, которые запрашивают у пользователя число, и программа должна указать, является ли это палидром или нет.Проблема с форматированием JAVA

Мой код выглядит следующим образом:

public static void main (String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter a value: "); 
     int value = scan.nextInt(); 

     int inversedNumber = reverse(value); 
     System.out.println("Is value " +value+ " a palindrome?: " +isPalidrome(value)); 
    } 
    public static int reverse(int number) 
    { 
     int reverse = 0; 
     while(number != 0) 
     { 
     reverse = reverse * 10; 
     reverse = reverse + number%10; 
     number = number/10; 
     } 
     return reverse; 
    } 

    public static boolean isPalidrome(int number) 
    { 
     boolean palidrome; 
     if(inversedNumber == number) 
     palidrome = true; 
     else 
     palidrome = false; 

     return palidrome; 
    } 
} 

Но каждый раз, когда я запускаю его, я получаю сообщение об ошибке, что говорит мне, что inversedNumber в методе isPalidrome не может быть найден. Но он был инициализирован в основном методе. Если он не ищет инициализацию в основном методе? Или мое формирование и/или логика неисправны.

+0

Нет, это не относится к другим методам для локальных переменных. Локальные переменные, ну, локальные. Вы можете передать их в качестве параметров вызовам метода. – Thilo

+0

Как вы можете скомпилировать это? Является ли inversedNumber также глобальным полем? – user2383728

ответ

3

inversedNumber объявлен в main() и не признается в методе isPalidrome(), потому что это не в том же scope.

Вы можете передать его следующим способом:

вызова: isPalidrome(value, inversedNumber)

и изменить сигнатуру метода для:

public static boolean isPalidrome(int number, int inversedNumber) 
-1

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

public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter a value: "); 
     int value = scan.nextInt(); 

     int inversedNumber = reverse(value); 
     System.out.println("Is value " +value+ " a palindrome?: " +isPalidrome(value,inversedNumber)); 
    } 
    public static int reverse(int number) 
    { 
     int reverse = 0; 
     while(number != 0) 
     { 
     reverse = reverse * 10; 
     reverse = reverse + number%10; 
     number = number/10; 
     } 
     return reverse; 
    } 

    public static boolean isPalidrome(int number, int inversedNumber) 
    { 
     boolean palidrome; 
     if(inversedNumber == number) 
     palidrome = true; 
     else 
     palidrome = false; 

     return palidrome; 
    } 

Кроме того, вы можете сделать inversedNumber, как глобальная переменная тоже, то каждые классы могут получить к нему доступ, вы можете объявить его вне класса следующим образом:

public static int inversedNumber; 
+1

Хотя это правда, что это должно сработать, вы должны объяснять, почему ваш ответ работает, а не просто решать его для них. – jyanks

1

ПРИМЕЧАНИЕ. Локальная переменная доступна только внутри блока. {}

Поскольку inversedNumber является локальным внутри основного метода и доступен только внутри его тела. У вас есть два варианта выполнения задания.

  1. Отправьте inversedNumber в качестве параметра метода isPalendrom и изменить сигнатуру метода, который ожидает два целых числа, как показано ниже.

    публичный статический логический isPalindrome (целое число, Int inversedNumber) Тогда вы называете его в основном, как isPalindrome(value, inversedNumber)

  2. сделать переменную inversedNumber глобальным, то вы сможете получить к нему доступ в любом месте в пределах класса.

    static int inversedNumber;

Тогда вы можете позвонить ему в главном и в другом месте, пока вы его вызываете.

inversedNumber = reverse(value); 
Смежные вопросы