0

我正在尝试创建一个返回 char 类型的方法。条件是这样的:系统从用户输入中获取 9 位数字并计算它。该方法转换 nextLine() 输入中的每个字符并计算总和,然后取 % 11。如果余数为 10,则方法返回“X”,如果余数为 0 到 9,则该方法返回该数字,但必须在字符类型。到目前为止,我迷失了为什么它总是输出'/'而没有别的。请帮我找出我的算法的错误。

public static char getCheckSum(String isbn) {
    int sum = 0;
    char charSum;
    for (int i = 0; i < isbn.length(); i++) {
        int[] num = new int[isbn.length()]; 
        num[i] = Character.getNumericValue(i) * (i+1);
        sum = sum + num[i];
    }
    int last = (sum % 11);

    if (last == 10){
        charSum = (char) 88;
    } else {
        charSum = (char) (last + 48);
    }
    return charSum;

//这是下一部分,它插入连字符作为参考

public static String formatISBNWithHyphens(String isbn) {
    // original isbn:       123456789
    // possible new isbn:   1-234-56789-X
    char isbn10 = getCheckSum(isbn);
    String isbn10Str = isbn + Character.toString(isbn10);

//  char[] c = new char[isbn10Str.length()];    *leaving this here for future learning.
    String[] cStr = new String[isbn10Str.length()];
    String isbnStr = "";
    for (int i = 0; i < isbn10Str.length(); i++){
        cStr[i] = Character.toString(isbn10Str.charAt(i));
//      c[i] = isbn10Str.charAt(i);             *leaving this here for future learning.
        if (i == 0 || i == 3 || i == 8 ) {
            cStr[i] += '-';
         }

         isbnStr += cStr[i];
    }
    return isbnStr;
}

// 最终结果总是像这样 321654987/ 和 3-216-54987-/ 它应该是从 0 到 9 的数字,如果余数是 10,则应该是 X。

请帮忙。谢谢一堆。

4

1 回答 1

1

我认为问题出在这里

for (int i = 0; i < isbn.length(); i++) {
    int[] num = new int[isbn.length()]; 
    num[i] = Character.getNumericValue(i) * (i+1);
    sum = sum + num[i];
}

返回结果的for循环与内容无关isbn's,结果只取决于isbn字符串的长度!

因此您可以将代码更改为下面的代码

for (int i = 0; i < isbn.length(); i++) {
        int[] num = new int[isbn.length()]; 
        num[i] = Character.getNumericValue(isbn.charAt(i));
        sum = sum + num[i];
}

上面的代码根据isbn's内容返回结果

于 2015-08-06T02:12:40.167 回答