You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java ISBN校验程序开发求助:数组元素交替乘1和3

解决ISBN校验中的交替加权问题

嘿,第一次发帖完全不用不好意思呀!咱们来一步步搞定这个ISBN校验的加权计算问题~

首先,先看看你现有代码里的小问题:

  • 你的循环条件i <= (num.length() - 2)会漏掉字符串的最后一个字符,而ISBN-13的最后一位是校验位,咱们需要处理所有字符才能完成计算哦。
  • 还没实现第1个元素乘1、第2个乘3、交替循环的加权逻辑。

修改后的完整代码实现

这里是调整后的代码,已经包含了交替加权的逻辑,我会一步步解释:

String num = "9783453146976"; 
// 拆分字符串为单个字符的数组
String[] splitNum = num.split(""); 
// 创建对应长度的int数组
int[] intsNum = new int[num.length()]; 
int total = 0; // 用来存储加权后的总和

// 遍历所有字符,转换为int并计算加权总和
for (int i = 0; i < num.length(); i++) { 
    intsNum[i] = Integer.parseInt(splitNum[i]); 
    // 实现交替加权:索引从0开始,偶数索引(第1、3、5...个元素)乘1,奇数索引(第2、4、6...个)乘3
    if (i % 2 == 0) {
        total += intsNum[i] * 1;
    } else {
        total += intsNum[i] * 3;
    }
}

// 输出加权总和,用于后续校验
System.out.println("加权总和:" + total);

// 完成ISBN-13的校验逻辑(可选)
int checkDigit = (10 - (total % 10)) % 10;
System.out.println("计算出的校验位:" + checkDigit);
// 对比原字符串的最后一位是否正确
int originalCheckDigit = intsNum[num.length() - 1];
System.out.println("原ISBN的校验位是否正确:" + (checkDigit == originalCheckDigit));

关键逻辑说明

  • 关于交替加权:因为数组索引从0开始,所以第1个元素对应索引0(偶数),乘1;第2个元素对应索引1(奇数),乘3,以此类推。用i % 2 == 0来判断就能完美实现交替规则。
  • 修复了循环范围:把i <= (num.length() - 2)改成i < num.length(),这样所有字符都会被处理到。
  • 额外补充了完整的ISBN-13校验逻辑:加权总和对10取模,用10减去这个模再取模10,就能得到正确的校验位,和原ISBN的最后一位对比就知道是否有效啦。

如果还有其他问题,随时问哦!

内容的提问来源于stack exchange,提问作者skidzophrenic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:32:48