Java 方法isbn char 转换和输出问题。无法找出算法中的错误
Java methods isbn char conversion and output problems. Can't find out mistake in algorithm
我正在尝试创建一个 returns char 类型的方法。条件是这样的:系统从用户输入中获取 9 位数字并进行计算。该方法转换 nextLine() 输入中的每个字符并计算总和,然后取 % 11。如果余数为 10,方法 return 'X',如果余数为 0 到 9,则方法 return是那个数字,但必须是字符类型。到目前为止,我不明白为什么它总是输出“/”而没有别的。请帮我找出我算法的错误。
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'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];
}
上面的代码returns结果取决于isbn's
内容
我正在尝试创建一个 returns char 类型的方法。条件是这样的:系统从用户输入中获取 9 位数字并进行计算。该方法转换 nextLine() 输入中的每个字符并计算总和,然后取 % 11。如果余数为 10,方法 return 'X',如果余数为 0 到 9,则方法 return是那个数字,但必须是字符类型。到目前为止,我不明白为什么它总是输出“/”而没有别的。请帮我找出我算法的错误。
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'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];
}
上面的代码returns结果取决于isbn's
内容