Java 校验和函数中的逻辑不正确 公共类信用卡号{ 私有字符串issuerID=“000000”; 私有字符串accountNum=“9999999”; 私有整数校验位=0; public CreditCardNumber(字符串TempissuerID、字符串TempaccountNum){ 如果(TempissuerID!=null&&TempaccountNum!=null &&TempissuerID.length()==6&&TempaccountNum.length()==9) if(数字(TempissuerID)和数字(TempaccountNum)){ issuerID=临时issuerID; accountNum=临时accountNum; calcCheckDigits(); } } 公共布尔数字(字符串temp1){ 字符串temp=“0123456789”; 整数计数=0; 对于(int i=0;i

Java 校验和函数中的逻辑不正确 公共类信用卡号{ 私有字符串issuerID=“000000”; 私有字符串accountNum=“9999999”; 私有整数校验位=0; public CreditCardNumber(字符串TempissuerID、字符串TempaccountNum){ 如果(TempissuerID!=null&&TempaccountNum!=null &&TempissuerID.length()==6&&TempaccountNum.length()==9) if(数字(TempissuerID)和数字(TempaccountNum)){ issuerID=临时issuerID; accountNum=临时accountNum; calcCheckDigits(); } } 公共布尔数字(字符串temp1){ 字符串temp=“0123456789”; 整数计数=0; 对于(int i=0;i,java,object,Java,Object,我的checksum方法有个问题,我写了一些printf语句来检查sum的值,结果是-930,但这不是sum的值,如果仅添加,则没有理由使用负号。当我为issuerID输入321321,为accountNum输入654654654时,我希望校验位数字为9,并且校验和中的和的值将传递给calCheckDigits方法,以获得校验位的值,即9 我在这种方法中做错了什么 好的,我只是编辑代码,现在我得到-30的总和 我刚刚再次编辑了校验和中的前2个for循环,导致临时字符串值不正确 现在它得到-320

我的checksum方法有个问题,我写了一些printf语句来检查sum的值,结果是-930,但这不是sum的值,如果仅添加,则没有理由使用负号。当我为issuerID输入321321,为accountNum输入654654654时,我希望校验位数字为9,并且校验和中的和的值将传递给calCheckDigits方法,以获得校验位的值,即9

我在这种方法中做错了什么

好的,我只是编辑代码,现在我得到-30的总和

我刚刚再次编辑了校验和中的前2个for循环,导致临时字符串值不正确

现在它得到-320
仍然不正确,但正在好转

您应该尝试缩小代码或其他内容的范围。并不是所有这些都是相关的,它只是给了我们更多的关注。您希望sum的值是多少?我没有详细阅读代码,但是校验和会是负数吗,因为它溢出了最大整数大小?也许可以尝试较小的输入,看看它是否返回正确。我只是用更多信息编辑帖子,所以我使用的输入是321321表示issuerID,654654654表示accountNum,这是此分配的测试运行输入OK我把它缩小到这一行temp.setCharAt(k,(char)num);在校验和函数中,因为我在一个循环中使用它,每次通过循环时,它加起来,得到和值big@user1787811:请编辑您的帖子,仅包含相关代码。此外,更合理地缩进代码,以便阅读。
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);
    }
    System.out.printf("%d", checkDigit);
}

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));
    }
    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 = temp.append(issuerID.charAt(i));
         }
                 for(int j = 0 ; j < accountNum.length(); j++)
                 {            
                     temp = temp.append(accountNum.charAt(j));
                 }

    System.out.println(temp);
    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';
    }
    System.out.printf("%d", sum);
    return sum;
}

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

        return str;
    }
}