2014-06-26 68 views
4

我是Java編程的初學者,我盡我所能,但我似乎無法解決我的問題。方法需要從用戶返回字符串。需要排除故障

我面臨的問題是getCardID()方法保持返回空值,getTokenBalance()似乎工作正常,或者我需要特殊的代碼從getCardID()返回一個字符串值?

任何幫助是非常感激。

這是Prepaidcard.java類:

class PrepaidCard { 
    private String cardID; 
    private int tokenBalance; 

    public PrepaidCard(String id) { // My First Constructor 
     String cardID = id ; 
    } 

    public PrepaidCard(String id, int token) { // My Second Constructor 
     String cardID = id; 
     tokenBalance = token; 
    } 

    public void addToken(int token) { // Methods 
     tokenBalance =token+tokenBalance; 
    } 

    public void deductToken(int token) { // Methods 
     tokenBalance=tokenBalance-token; 
    } 

    public int getTokenBalance() { // Methods 
     return tokenBalance; 
    } 

    public String getCardID() { // Why does this method keep returning null value? 
     return cardID; 
    } 
} 

這是類用來測試prepaidcard.java

import java.util.*; 

class testprepaid { 
    public static void main(String [] args) { 
     Scanner sc = new Scanner(System.in); 

     System.out.print("Insert card1 id : "); 
     String newid = sc.nextLine(); // my scanner class that read user input in String 

     System.out.print("Insert card2 id : "); 
     String newid2 = sc.nextLine(); // my scanner class that read user input in String 

     System.out.print("Enter Card2 initial token : "); 
     int itoken = sc.nextInt(); 

     PrepaidCard card1 = new PrepaidCard(newid); // object created base on 1st & 2nd Constructor 
     PrepaidCard card2 = new PrepaidCard(newid2,itoken); 

     System.out.println("Card1 ID: " + card1.getCardID());  // the method return null when called 
     System.out.println("Card1 token balance : " + card1.getTokenBalance()); 
     System.out.println("Card2 ID: " + card2.getCardID());   // and this 
     System.out.println("Card2 token balance : " + card2.getTokenBalance()); 

與其他行有沒有錯誤,所以我沒有添加。

你可以看到我的運行時錯誤here

+0

這個問題寫得很好。相關代碼已發佈,問題描述可以理解。做得好。 +1 – Seelenvirtuose

回答

5

在你的構造函數,你宣佈一個新的局部變量:

public PrepaidCard(String id, int token) {// My Second Constructor 

    String cardID = id; //This should be cardID = id; 
    tokenBalance = token; 
} 

根據您的IDE,您可以啓用警告,可以告訴你未初始化的私有成員。

2
String cardID = id ; 

應該是一個實例變量。

所以刪除字符串cardID的局部聲明 -

public PrepaidCard(String id){ //My First Constructor 
cardID = id ; 
} 
+0

類變量意味着[靜態](http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html)變量,您應該重新解釋您的答案。 – Djon

+0

@Djon謝謝 –