-2
package homework4;

public class CreditCardNumber {
private String issuerID = "000000";
private String accountNum = "999999999";
private int checkDigit = 0;

public CreditCardNumber(String TempissuerID, String TempaccountNum)
{
    if(TempissuerID != null && TempaccountNum != null && TempissuerID.length() == 6 && TempaccountNum.length() == 9)
        if(Digits(TempissuerID) && Digits(TempaccountNum))
        {
            issuerID = TempissuerID;
            accountNum = TempaccountNum;
            calcCheckDigits();
        }

}

public boolean Digits(String temp1)
{
    String temp = "0123456789";
    int count = 0;
    for(int i = 0; i < temp1.length();i++)
        for(int j = 0; j < temp.length();j++)
            if(temp1.charAt(i) != temp.charAt(j))
            {
                count++;

            }
    if(count == temp1.length()){
        return true;
    }
    return false;
}

public CreditCardNumber(){}

public String getID()
{
    return issuerID;
}

public String getAccNum()
{
    return accountNum;
}

public int getDigits()
{
    return checkDigit;
}

private void calcCheckDigits()
{
    int sum;
    sum = checkSum();
    if((sum + checkDigit) % 10 != 0)    
    {
        checkDigit = sum - (sum % 10);
    }

}

public void CreateCred(String TempissuerID)
{
    if(TempissuerID != null && TempissuerID.length() ==6 && Digits(TempissuerID))
    {
        issuerID = TempissuerID;
    }
    else 
    {
        issuerID = "000000";
    }
    StringBuilder TempString = new StringBuilder();
    for(int i = 0; i < 9 ; i++)
    {
        TempString = TempString.append((Math.random()*(9-0+1)+0));
        System.out.printf("%d",TempString);
    }
    accountNum = TempString.toString();
    calcCheckDigits();
}

 private int checkSum()
 {       StringBuilder temp = new StringBuilder();
         int num;
         int sum =0;
         for(int i = 0 ; i <issuerID.length();i++)
         {
                 temp.append(issuerID.length());
                 for(int j = 0 ; j < accountNum.length(); j++)

                 temp.append(accountNum.length());
         }
         for(int k = 0 ; k < temp.length(); k +=2)
         {
                 num = temp.charAt(k) - '0';
                 num *=2;
                 if(num > 9)
                   num = 1 + (num % 10);
                 temp.setCharAt(k, (char) num);
         }
         for(int v = 0 ; v < temp.length(); v++)
         {
                 sum += temp.charAt(v) - '0';
         }

         return sum;
 }

 public String toString()
 {      
     return issuerID + accountNum + checkDigit;

 }
}

// 別のファイルで

package homework4;
import java.util.Scanner;
public class Prog4 {

public static void main(String[] args)
{   CreditCardNumber[] cred1;
    CreditCardNumber cred2 = getInput();
    Display(cred2);
    cred1 = getInputArray();
}

public static CreditCardNumber getInput() {
    String ID;
    String accNum;
    CreditCardNumber tempCred;      
    Scanner scanner = new Scanner(System.in);
    System.out.printf("Please enter issuer ID:");
    ID = scanner.next();
    System.out.printf("Please enter account number:");
    accNum = scanner.next();
    tempCred = new CreditCardNumber(ID, accNum);
    return tempCred;
}
public static void Display(CreditCardNumber cred2)
{

    System.out.printf("The complete number from your input:");
    System.out.println(cred2);
    return;

}

public static CreditCardNumber[] getInputArray()
{
    CreditCardNumber[] tempArray;
    String tempID;
    int size;
    Scanner scanner = new Scanner(System.in);
    System.out.printf("Please enter size of the aray:");
    size = scanner.nextInt();
    if(size < 1)
    {
        size = 1;
    }
    tempArray = new CreditCardNumber[size];
    System.out.printf("Please enter issuer ID:");
    tempID = scanner.next();
    for(int i = 0; i < size; i++)
    {

    }

    return tempArray;
}

}

こんにちは、メインの getInput メソッドについて質問があります。コードをコンパイルして実行すると、出力は次のようになります。

enter issuer ID:321321
Please enter account number:654654654
The complete number from your input:0000009999999990 

これは、CreditCardNumber クラスの issuerId と acountNum のデフォルト値です。

しかし、私が欲しいのはこの出力です

Enter a credit card issuer number: 321321
Enter an account number: 654654654
The complete number from your input: 
3213 2165 4654 6549

各 4 文字の間に 4 つのスペースがあると、コードがユーザー入力値ではなくデフォルト値を出力するのはなぜですか?

コードまたは getinput() 関数の問題点を教えてもらえますか?

少し早いですがお礼を

4

2 に答える 2

0

コードをデバッグしたところ、この特定の input に対して digit メソッドが false を返しているため、コンストラクターの if 条件が失敗するため、デフォルト値が保持されます。

正規表現を使用して、渡された文字列が数値かどうかを確認してください。

Digits メソッドを以下のように変更します。

    public boolean Digits(String temp1)
    {
        if(temp1.matches("[0-9]+")){
            return true;
        }
        else {
            return false;
        }
}

toString メソッドを次のように変更します。

 public String toString()
 {   String s="";   
     String str= issuerID + accountNum ;

     return str;

 }

それは私に出力を与えました:

Please enter issuer ID:321321
Please enter account number:654654654
The complete number from your input:321321654654654
于 2012-11-17T01:31:53.697 に答える
0

if(temp1.charAt(i) != temp.charAt(j))にある必要がif(temp1.charAt(i) == temp.charAt(j))ありpublic boolean Digits(String)ます。

文字をホワイトリストに登録しているため、一致しない文字ではなく、一致する文字をカウントする必要があります。

文字列が少なくとも 1 つの数字で構成されていることを確認する別の方法:

public boolean Digits(String str) {
    for(int i = 0; i < str.length(); i++)
        if(str.charAt(i) < '0' || str.charAt(i) > '9')
            return false;
    return str.length() > 0;
}

これはテストしていませんが、動作するはずです。

于 2012-11-17T01:22:16.737 に答える