2017-08-22 152 views
-1

我想做一個if語句,用戶必須輸入一個16位數的字符串,如果他們失敗了,他們必須重試。我已經在C++中完成了這一點,但不知道如何在java中這樣做。這是我的代碼到目前爲止。我還希望卡號可以像卡號一樣以「xxxx xxxx xxxx xxxx」格式保存。我應該以這種格式返回嗎?Java - 字符串輸入錯誤,允許額外的輸入

public PersonalAccount(String user_firstName, String user_lastName, String user_accountNumber, String street, String town, String postcode, String user_cardNumber, char user_cardType) { 
    super(user_firstName, user_lastName, user_accountNumber, street, town, postcode); 

    if (user_cardNumber.length() == 16) {  
     cardNumber = user_cardNumber; 
    } else { 
     System.out.println("Incorrect card number length"); 
    } 

    cardType = user_cardType; 
} 
+0

所有共享代碼正在做的是檢查的長度約束。您的需求清單中沒有其他內容。 – nullpointer

+0

是的,我希望它檢查卡號的長度是16,如果它不是它應該使用戶重新輸入 – Dave

+1

這段代碼是一團糟。什麼是超類?用戶如何與此代碼交互?它是通過一些'Scanner'類嗎?那麼你可能會想到某種'while'循環。很難猜測你在看什麼。 – Pijotrek

回答

0

應該拋出一個異常(EG IllegalArgumentException)而不是打印錯誤信息到控制檯...

這樣調用者可以捕獲異常,並採取行動上面。

至於格式,如果你想格式化字符串,不包含空格,每四位數字後有空格,你應該嘗試這樣的事:

public String formatCardNumber(String cardNumber) 
{ 
    StringBuilder sb = new StringBuilder(20); 
    for (int i = 0; i < 16; i+=4) 
    { 
     sb.append(' ').append(user_cardNumber, i, i + 4); 
    } 
    return sb.substring(1); 
} 
+0

這是甚至有關的問題?甚至答案? – nullpointer

+0

如果不正確,OP想要重新輸入值。這是一個構造函數。因此,顯而易見的解決方案拋出一個異常,並在構造函數調用者處理異常,EG重新輸入值不正確... –

+0

這將如何在代碼中工作?以及這將如何讓用戶重新輸入。 – Dave

0

可以使用的方法類似這如果輸入了16位

  1. 檢查
  2. 拋出一個異常,表明輸入不正確
  3. 回報如果格式是正確的,則在每四位數字後加空格。

    String checkCardnumber(String user_cardNumber) { 
        if(!user_cardNumber.matches("[\\d]{16}")) { 
        throw new IllegalArgumentException(); 
        } else { 
        return user_cardNumber.replaceAll("([\\d]{4})([\\d]{4})([\\d]{4})([\\d]{4})", "$1 $2 $3 $4"); 
        } 
    } 
    
+0

我想用這種格式將它保存到CardNumber中,這可能嗎? – Dave

+0

保存是什麼意思?您可以將其存儲在任何字符串中。 – JensS