2014-01-25 3 views
-2

Jcreator говорит, что переменная большая, возможно, не была инициализирована, если (большой% 2 == 0). Затем я меняю «int large» на «int big = 0», он работает. Я инициализировал большой в первых двух операциях if, если (big% 2 == 0), почему это произошло?Инициализация переменных Java и оператор if

import java.util.Scanner; 

public class Large 
{ 
    public static void main(String[]args) 
    { 
     Scanner in=new Scanner(System.in); 
     int number1,number2; 
     int big; 
     System.out.println("Enter 2 values"); 
     number1=in.nextInt(); 
     number2=in.nextInt(); 
     if(number1>number2) 
      big=number1; 
     if(number2>=number1) 
      big=number2; 
     if(big%2==0) 
      System.out.println("even"); 
     if(big%2==1) 
      System.out.println("odd"); 
    } 
} 

ответ

0

Ваша переменная была объявлена, но не инициализирована.

Инициализация переменной утверждает, каково ее значение. Вы не должны использовать переменную до тех пор, пока ее значение не будет установлено.

+0

спасибо – 3pique

3

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

if(number1>number2) 
    big=number1; 
else /* if(number2>=number1) <-- because, this is a new expression */ 
    big=number2; 

Или ternary,

big = (number1>number2) ? number1 : number2; 

Или Math.max(int, int),

big = java.lang.Math.max(number1, number2); 
+3

+1 Или 'Math.max (число1, число2);':) –

+0

@JoshM Хорошего вызова. Добавлено. –

+0

спасибо, что помогли мне – 3pique

0

Локальные переменные требуют явного инициализации или назначения перед использованием.

Компилятор не знает, что ваша логика означает, что переменная должна быть назначена, она знает только, что существует пара инструкций if, где переменная может быть инициализирована, но есть вероятность, что она не будет, если ни если условие истинно.

Потому что ваш второй, если условие является противоположностью, если первый, изменить его на другое:

if(number1>number2) 
    big=number1; 
else 
    big=number2; 

Компилятор теперь будет счастлив, что независимо от состояния, переменная должна быть присвоено значение.


Рассмотрите возможность использования трехкомпонентной для объявления в одной строке и назначение:

int big = number1 > number2 ? number1 : number2; 
+0

спасибо, я понял. – 3pique

0

Этот код будет работать.

Scanner in=new Scanner(System.in); 
    int number1,number2; 
    int big; 
    System.out.println("Enter 2 values"); 
    number1=in.nextInt(); 
    number2=in.nextInt(); 
    if(number1>number2) { 
     big=number1; 
    } else if(number2>number1) { 
     big=number2; 
    } else { 
     big = number1; 
    } 
    if(big%2==0) 
     System.out.println("even"); 
    if(big%2==1) 
     System.out.println("odd"); 
+0

благодарит за вашу помощь – 3pique

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