2015-06-13 3 views
0

Я пишу класс водителя для класса копировального банка, который я создал. Идея состоит в том, что предполагается добавить различные типы монет (ввод пользователя), а затем суммировать центы и отображать их до тех пор, пока пользователь не добавит «X». Я думаю, что у меня правильный код, но есть странная проблема, если я использую в коде код «countMoney», он говорит мне, что все мои переменные в классе драйвера не инициализированы. Если я удалю его, ошибок Eclipse нет. Я напечатал свой источник и класс водителя ниже:Weird error on driver class

package piggy; 

/** 
* @author Kevin 
* 
*/ 

import java.util.Scanner; 
import piggy.PiggyBank; 
public class PiggyBankTester { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     String num = "str", num1; 
     int count = 0; 
     int money; 

     Scanner scan = new Scanner(System.in); 
     Scanner scan2 = new Scanner(System.in); 

     PiggyBank total = new PiggyBank(); 

     System.out.println("Welcome to the Piggy Bank Tester"); 

     System.out.println("What type of coin to add (Q, H, D or X to exit)?");  
     num1 = scan.nextLine(); 
     num = num1.toUpperCase(); 
     { 
     if (num.equals("X")) 

      System.out.println("Goodbye."); 
     else if (num != "X") 
      { 
      System.out.println("How many do you wish to add?"); 
      count = scan.nextInt(); 
      if (num.equals("Q")) 
       total.addQuarters(count); 
      else if (num.equals("H")) 
       total.addHalfDollars(count); 
      else if (num.equals("D")) 
       total.addDollars(count); 
      else if (num.equals("X")) 
       System.out.println("Goodbye."); 


      } 
     } 


     { 
     total.calculate(); 
     money = total.countMoney(); 


     System.out.println("The piggy bank now contains " + money + " cents."); 
     } 
    } 

} 
+1

Это хорошая практика при инициализации экземпляров для явного задания значения всех переменных экземпляра. В вашем случае «numquarters», «numhalfs», «numdollars» и «cents» должны быть установлены на ноль. –

+0

@BrettWalker Почему это хорошая практика? –

+0

Это делает очень понятным для других то, что вы намерены. –

ответ

0

Вам не нужно (строка Q, D, H, X). Также вы указали эти переменные, не давая им никакого значения только имени. Способ, которым вы можете это сделать, - изменить ваши инструкции if-else и установить, например, если вы хотите, чтобы число было равно Q ---> if (num.equals («Q»)) < ---

+0

Я обновил код, и он выполняется правильно, за исключением того, что он не продолжает возвращаться и просит монеты, пока не будет введено значение x. Я знаю, что это потому, что я не использую цикл while, но каждый раз, когда я пытаюсь использовать while вместо else if, я застреваю в бесконечном цикле. Я отредактирую сообщение с обновленным кодом. – Kevin

+0

Используйте это -> if (! "Success" .equals (statusCheck)) <- Добавьте это условие в цикл while, если вы хотите, чтобы это произошло много раз, если вы хотите сказать, что две строки не равны ! Не (! =) И будет логически работать. –