2013-03-19 66 views
1

我對所有這些都非常陌生,我的第一年主修編程和網頁設計。我在網上參加我的課程,我的教授偶爾很難得到。變量可能未初始化錯誤和一般建議

反正我已經寫了從一個程序,它的銀行信息(賬號,賬戶餘額和賬戶類型[儲蓄或checkings],計算利息和服務費,並輸出賬戶號碼和賬戶餘額的代碼。

我的主要問題是一個語法錯誤,指出我的變量「servCharge」可能沒有被初始化,我已經仔細研究了這個過程,無法追查我做錯了什麼。這對你們大多數人來說都很容易發現,任何有關這方面的幫助以及關於如何清理我的代碼的總體建議都會有所幫助,並且非常感謝!

這是我到目前爲止有:

import java.util.*; 

public class Unit5 
{ 
    static Scanner console = new Scanner(System.in); 

    public static void main(String[] args) 
    { 

     final double CHECKING_MIN_BAL = 25.00; 
     final double CHECKING_SFEE = 25.00; 
     final double MAX_CHECKING_INTR = .015; 
     final double MIN_CHECKING_INTR = .03; 
     final double SAVINGS_MIN_BAL = 500.00; 
     final double SAVINGS_SFEE = 10.00; 
     final double SAVINGS_INTR = .04; 
     final double FIVE_THOU = 5000.00; 

     String accountNumber; 
     String accountBal; 
     String accountType; 
     double accountBalDbl; 
     double interest; 
     double servCharge; 
     double accountBalFinal; 

     System.out.println("Bank"); 
     System.out.println("Please enter a 10 digit " 
          +"account number or enter # to exit: "); 
     while (! (accountNumber = console.next()).equalsIgnoreCase("#")) 
     { 
     if (accountNumber.matches("^[0-9]{10}")) 
     { 
      System.out.println(); 
     }else{ 
      System.out.println("Invalid account number!"); 
      System.exit(0); 
     } 

     System.out.println("Please enter account balance: "); 
     accountBal = console.next(); 
     { 
      if (accountBal.matches("^\\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(\\.[0-9][0-9])?$")) //adjust so it takes more numbers before decimal 
      { 
      System.out.println(); 
      }else{ 
      System.out.println("Invalid dollar amount!"); 
      System.exit(0); 
      } 

      System.out.println("Please enter account type," 
         +"C for checking or S for savings"); 
      accountType = console.next(); 
      { 
      if (accountType.matches("^[Ss | Cc]")) //look into this 
      { 
      System.out.println(); 
      }else{ 
      System.out.println("Invalid account type, please enter" 
          +"C or S"); 
      System.exit(0); 
      } 

      accountBalDbl = Double.parseDouble(accountBal); 
      { 
      if (accountType == ("[Cc]")) 
      {  
       if (accountBalDbl < CHECKING_MIN_BAL) 
        servCharge = CHECKING_SFEE; 
       else 
        servCharge = 0.0; 

      if (accountBalDbl < CHECKING_MIN_BAL + FIVE_THOU) 
       interest = accountBalDbl * MIN_CHECKING_INTR; 
      } 
      } 
      { 
      if (accountType == ("S | s")) 
      { 
      if (accountBalDbl < SAVINGS_MIN_BAL) 
       servCharge = SAVINGS_SFEE; 
       interest = 0.0; 
      }else{ 
       servCharge = 0.0; 
       interest = accountBalDbl * SAVINGS_INTR; 
      } 
      } 
      accountBalFinal = (accountBalDbl - servCharge) + interest; 
      System.out.println("Account Number: " + accountNumber); 
      System.out.println(); 
      System.out.println("Current Balance: " + accountBalFinal); 
      System.out.println(); 
      System.out.println("Please enter a 10 digit " 
        +"account number or enter # to exit: "); 

     } 
     } 
     } 
    } 
    } 

回答

1

您的格式是有點棘手破譯,但你提的錯誤是與事實有至少一個分支通過您的代碼做你沒有給servCharge分配一個值。這是一個問題,當你嘗試這樣做:

accountBalFinal = (accountBalDbl - servCharge) + interest; 

通過所有的分支確保你總是設置servCharge的東西,和/或確保它在開始時設置爲默認值您碼。喜歡的東西:

servCharge = 0.0; 

與最大的問題是,你可能最終與servCharge你沒有想到(0.0)的值。檢查你所有的if/else分支,並確保你爲每個分支的servCharge分配合適的值。

1

錯誤本身表明如何克服這個問題。您需要將變量初始化爲某個默認值。這是因爲局部變量(方法中聲明的變量)不會在java中隱式初始化。因此,編譯器會在使用它之前用錯誤信息提示你初始化變量。

如果您只是在方法體內聲明一個(不初始化它)並且從不使用它,那麼您不會得到錯誤消息。編譯器只會打擾你,如果你嘗試使用未初始化的局部變量,如分配一個值,打印其內容等。

我建議你閱讀java基礎知識來掌握這些東西。希望這可以幫助。