2014-01-15 6 views
-1

Пользователь должен ввести значения в x и y, а если x больше 5 и, когда y = 0, то z должно быть эквивалентно x + y. Однако, когда я компилирую, это дает мне ошибку, говоря, что z может не быть инициализировано.Причина ошибки: var может быть не инициализирован

import java.util.Scanner; 
public class add { 
    public static void main(String[] args){ 
     Scanner input = new Scanner (System.in); 
     System.out.print("Enter a value for x"); 
     int x = input.nextInt(); 

     System.out.print("\nEnter a value for y "); 
     int y = input.nextInt(); 

     int z; 

     if (x > 5){ 
      if (y == 0) 
       z = x + y; 
      System.out.println("The answer is " + z); 

     } 
     else 
      System.out.println("The answer is only" + x); 
    } 
} 
+1

Просто: Если 'y == 0' является ложным, тогда' z' останется неинициализированным. –

+0

... или 'x> 5' is false –

+0

Вы инициализируете' z' только когда 'y == 0'. Вам нужно инициализировать, если вы хотите использовать его дальше, например 'int z = 0;' –

ответ

0

Поскольку вы не используете фигурные скобки для условия if, ваш z не будет инициализирован.

Для решения таких проблем всегда следует иметь в виду, что если вы вычисляете что-то с целочисленной переменной, инициализируйте их с некоторым значением (здесь 0 является лучшим).

Затем вы можете получить доступ к этой переменной в любом месте кода без какой-либо ошибки инициализации.

Чтобы избавиться от этой проблемы, у вас есть два пути

Один из способов:

просто инициализировать переменную г, как:

int z=0; 

Второй способ:

Попробуйте поставить скобки для, если состояние похоже:

if (y == 0){ 
    z = x + y; 
    System.out.println("The answer is " + z); 
} 
+0

первый способ намного лучше спасибо – user3196297

4

Существует канал для выполнения которой z не инициализируются, но при попытке распечатать его. Если x больше 5, но y не 0, то z не инициализирован, но вы ссылаетесь на z при его печати.

Используйте скобки, чтобы создать внутренний блок для вашего внутреннего if заявления, так z упоминается только, если он инициализирован:

if (x > 5){ 
    if (y == 0) { 
     z = x + y; 
     System.out.println("The answer is " + z); 
    } 
} 

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

1

Ваше 'если' заявление вводит в заблуждение:

if (y == 0) 
    z = x + y; 

Что делать, если у = 0!? В этом случае z не инициализируется.

Следующая строка

System.out.println("The answer is " + z); 

не относится к у == 0 заявление, как вы не фигурные скобки {}.

вероятно Вы имели в виду, чтобы написать что-то вроде:

if (x > 5) { 
    if (y == 0) { 
    z = x + y; 
    System.out.println("The answer is " + z); 
    } 
} 

Обратите внимание на "{" после того, если заявление.

0

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

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

Что-то вдоль этих линий:

int z = 0; // just an example 
0

ИНТ г не имеет значения, попробуйте код в нижней части затем дать ему 0 или input.nextInt(); int z = 0; или int z = input.nextInt();

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