2014-10-03 2 views
0

Моя программа рисует монстра-коути (тело и голову), а тело должно быть нарисовано перед головой. Но когда я запускаю программу, она говорит: «Невозможно добавить часть тела!» когда я набираю 2 в качестве ввода (даже если у меня уже есть тело). ПРИМЕЧАНИЕ: 1 в качестве входного сигнала рисует тело и 2 рисует головку.Почему «тело» сбрасывается до нуля?

Я уже определил проблему, но я не уверен, как ее исправить. Проблема в том, что голова сбрасывается до 0, прежде чем она войдет в «if (rollValue == 2) ...». Моя программа может нарисовать тело, но после того, как он закончил рисовать тело, моя переменная body изменится на 0. Именно поэтому моя программа не рисует голову. Любые идеи о том, как исправить это, чтобы моя программа не сбросила «тело» обратно на 0 после рисования тела?

import java.util.Scanner; 

public class Cootie 
{ 
    public static void main(String[] args) 
    { 
     boolean done = false; 

     while (!done) 
     { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("BODY PARTS:"); 
     System.out.println("1 = body"); 
     System.out.println("2 = head"); 
     System.out.println("3 = one leg"); 
     System.out.println("4 = one antenna"); 
     System.out.println("5 = one eye"); 
     System.out.println("6 = tail"); 
     System.out.println("What number did you roll?: "); 
     int rollValue = scanner.nextInt(); 

     int body = 0; 
     int head = 0; 

     if (rollValue == 1) 
     { 
      if (body == 0) 
      { 
       body = 1; 
      } 
      else 
      { 
       System.out.println("Can't add body part!"); 
       System.out.println(" ");; 
      } 
     } 
     else if (rollValue == 2) 
     { 
      if (body == 1 && head == 0) 
      { 
       head = 1; 
      } 
      else 
      { 
       System.out.println("Can't add body part!"); 
      } 
     } 
     else 
     { 
      System.out.println("Enter a valid input!"); 
     } 
     if (body == 1) 
     { 
      System.out.println("------------------------------"); 
      System.out.println("You got the body!"); 
      System.out.println(" "); 
      System.out.println(" "); 
      System.out.println(" [ ]"); 
      System.out.println(" "); 
      System.out.println(" [ ]"); 
      System.out.println(" "); 
      System.out.println(" [ ]"); 
      System.out.println(" "); 
     } 
     if (head == 1) 
     { 
      System.out.println("You got the head!"); 
      System.out.println(" "); 
      System.out.println(" ( )"); 
     } 
     if (body == 1 && head == 1) 
     { 
      System.out.println("Congratulations you have completed your cootie!"); 
      done = true; 
     } 
     } 
    } 
} 
+1

Просто догадка - может быть, это так: 'int body = 0;' –

+0

Карен у вас всегда такая же проблема. Весь ваш вопрос вы добавляете дополнительные нежелательные заявления в цикле. : p – StackFlowed

+0

@wrongAnswer: Да, я делаю это как практику. В программе больше, но мне просто нужно руководствоваться этой частью. :) – Karen

ответ

2

Это потому, что вы заявляете, что тело и голова находятся внутри цикла while. Чтобы исправить это, создайте переменные до

while (!done) 

итерации.

+0

+1 за бытие: p – Alboz

+0

Ха-ха! Не могу поверить, что я этого не понимал! Даже не осознал, что я объявил это в цикле while. Спасибо! – Karen

+0

Примите это, если это поможет! – PsyCode

4

Вы объявили свои bodyhead) переменные внутри цикла while, так что это будет работать каждый цикл:

int body = 0; 
int head = 0; 

Таким образом, каждый цикл, эти переменные сбрасываются в 0. Чтобы сохранить значения для разных итераций, объявите и инициализируйте их до цикла while, поэтому они инициализируются только 0. (Вы можете объявить и инициализировать Scanner перед цикл начинается также.)

int body = 0; 
int head = 0; 
Scanner scanner = new Scanner(System.in); 

while (!done) 
{ 
    // Other code still the same 
+0

ОН, даже не осознавая, что они были объявлены во время цикла! Я должен был это понять, спасибо! – Karen

0

Ваше тело и переменная голова инициализируются внутри цикла в то время, поэтому он обнуляется каждый раз. Просто переместите эти переменные из цикла while.

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

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