Java方法isbn char转换和输出问题。无法找出算法中的错误

标签 java algorithm methods isbn

我正在尝试创建一个返回 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。

请帮忙。非常感谢。

最佳答案

我觉得问题出在这里

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的内容无关,结果只取决于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的内容返回一个结果

关于Java方法isbn char转换和输出问题。无法找出算法中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31845509/

相关文章:

java - 如何在执行 Object object = new Object() 时注入(inject)依赖项

java - 从属性文件中读取hibernate注释属性值

python - 数组中的索引,使其前缀和等于其后缀和 - 最佳解决方案

javascript - 看不懂这个 Javascript 函数(函数重载)

php - 从不同的 "method of a class"调用递归 "method of the same class"

java - 如何从其他类中调用数据结构

java - 在 Java 中使用 Python 创建的 JWT Token

java - 当字段不存在而没有自定义反序列化时,如何强制 GSON 反序列化异常?

c# - 如何将包含 3 个项目的元组列表分组,其中 element.item3 == element2.item2

c# - 旅行商问题,2-opt 算法 c# 实现