2015-04-15 3 views
-2

Я создаю приложение для заказа пиццы для своего курса в колледже и работаю над кодом. Будучи довольно noobish, когда дело доходит до кодирования, у меня были проблемы с Eclipse, говорящие мне, что две булевы переменные не используются, когда я знаю, что они есть.Почему мои булевы переменные не распознаются? - Java

Мои переменные имеют глупые имена, но мне легко запомнить при написании программы. По какой-то причине мои переменные Topping и DoubleCheeseBoolean не распознаются в коде, хотя, когда я их использую, ошибок не возникает.

Это все, что у меня есть сейчас, может кто-то пожалуйста, просто скажите мне, что мне нужно сделать, чтобы исправить мои логические проблемы.

public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); // Creates Scanner 

    // Variables 
    String DoubleCheeseString; 
    Boolean DoubleCheeseBoolean; 

    Boolean Topping; 
    int Topping1; 
    int Topping2; 

    int Attempts = 3; 

    double Cost = 00.00; 

    // Program 
    // Asks the user if they would like a double cheese pizza 
     System.out.println("Would you like double cheese for 50p more? (Answer with either 'yes' or 'no')"); 
     DoubleCheeseString = keyboard.nextLine(); 
     if (DoubleCheeseString == "yes") { 
      DoubleCheeseBoolean = true; 
     } else if (DoubleCheeseString == "no") { 
      DoubleCheeseBoolean = false; 
     } else { 

     } 

     // Asks the user if they would like a topping on their pizza 
     Attempts = 3; 
     while (Attempts > 0) { 
      System.out.println("Would you like to add a topping to your pizza?"); 
      System.out.println("The first topping cost £1.00 and up to two more can be added for 50p each"); 
      System.out.println("(Answer with 'yes' or 'no')"); 
      if (keyboard.hasNext("yes")) { 
       Topping = true; 
      } else if (keyboard.hasNext("No")) { 
       Topping = false; 
      } else { 
       System.out.println("Please enter 'yes' or 'no'. Anything else is invalid."); 
       System.out.println("You have " + Attempts + " left before the program closes."); 
       if (Attempts == 0) { 
        System.exit(0); 
       } 
+1

Пожалуйста, не публикуйте всю программу. Изолируйте проблему и опубликуйте только соответствующий код. Это слишком много, чтобы читать –

+5

Используйте 'String.equals' для сравнения строк – Reimeus

ответ

3

Использование переменных и присвоение им очень разных вещей.

например: Здесь я назначаю переменную, но не использую ее.

int x = 3; 

например: Здесь я использую переменную.

if (x == 3) { // do something } 

В вашем случае вы не используете переменные вообще, и все, что вы сделали, это присвоить значения.

Решения: Если вы действительно хотите избавиться от предупреждений, вы можете распечатать их или что-то еще, и это решит проблему. Обратите внимание, что неиспользуемые предупреждения переменных могут быть проигнорированы без проблем. Или вы можете просто удалить их и их назначения, так как они не использовались в любом случае.

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

Для дальнейшего использования, пожалуйста, используйте .equals(), чтобы сравнить ваши строки. Когда вы сравниваете строки с использованием ==, результат почти всегда будет ложным.

Возможно, вы захотите включить блок else, когда вы тестируете ввод «да/нет», если пользователь вводит неверный ввод. Помните: никогда не доверяйте пользовательскому вводу!

+1

Спасибо. На данный момент ваш ответ наиболее информативен. Я знаю, что мог бы запустить программу без них, но я просто хотел убедиться, что с кодом ничего не случилось. Все другие переменные, которые я использовал в коде, не возвращали никаких ошибок, и я не мог точно понять, что я сделал по-другому. Еще раз большое спасибо, я не понял, что я просто назначал их, а не использовал их. –

0

Я не вижу, чтобы они использовались где угодно ... вы назначаете им значения, но не читаете их. Eclipse будет жаловаться на это (как вы видите).

0

В вашем коде есть определенные условия ветвления, которые не будут устанавливать значение Topping boolean.

Вот соответствующий код: не

if (keyboard.hasNext("yes")) { 
     Topping = true; 
    } else if (keyboard.hasNext("No")) { 
     Topping = false; 
    } else { 

Таким образом, если пользователь вводит что-то другое, чем «да» или «нет», то переменная не будут использоваться. То же самое с этим кодом:

if(DoubleCheeseString=="yes"){ 
     DoubleCheeseBoolean=true; 
    }else if(DoubleCheeseString=="no"){ 
     DoubleCheeseBoolean=false; 
    }else{ 

    } 

Вы можете просто инициализировать переменную с False исправить предупреждения.

+1

Что вы говорите правильно, но не ответ на его вопрос Q. – vorburger