该代码的目的是解决瑞典身份证号码中的最后一位数字,但它似乎无法正常工作。该算法在此处描述:wikipedia
import java.util.Scanner;
public class pers5 {
public static void main(String[] args) {
int k0=0,k1=0,k2=0,k3=0,k4=0,k5=0,k6=0,k7=0,k8=0;
System.out.print("Skriv in ett personnummer: ");
String indata = new Scanner(System.in).nextLine();
for (int i=0; i<9; i++){
int nummer=indata.charAt(i) -48;
System.out.print(indata.charAt(i)+ " ");
System.out.println(indata.charAt(i));
int tal0 = indata.charAt(0);
int tal1 = indata.charAt(1);
int tal2 = indata.charAt(2);
int tal3 = indata.charAt(3);
int tal4 = indata.charAt(4);
int tal5 = indata.charAt(5);
int tal6 = indata.charAt(6);
int tal7 = indata.charAt(7);
int tal8 = indata.charAt(8);
k0=tal0*2;
k1=tal1;
k2=tal2*2;
k3=tal3;
k4=tal4*2;
k5=tal5;
k6=tal6*2;
k7=tal7;
k8=tal8*2;
以下是解决最后一个数字的部分:
int sum = 0;
while (k0 != 0) {
sum += k0 % 10;
k0 /= 10;
}
System.out.println("Sum of digits: " + sum);}
}
现在它显然只能解决k0的总和,但这就是我需要的帮助。
答案 0 :(得分:0)
好的,我从你的个人资料中猜到你在谈论瑞典的个人身份号码。
首先,talX
变量出错。您忘记减去48
(或以其他方式解析字符以获取int值)。
要回答您的问题 - 您应该删除所有:
int sum = 0;
while (k0 != 0) {
sum += k0 % 10;
k0 /= 10;
}
对于第一个数字,这将正常工作:
System.out.println("Sum of digits: " + (k0%10 + k0/10))
这就是你问的问题,但为了解决整个问题,我建议你重构代码。 k0
,k1
等变量不容易迭代。尝试创建一个数组(或甚至计算for (int i=0; i<9; i++)
循环中的下一个数字总和)。
例如:
for (int i=0; i<9; i++){
int nummer = indata.charAt(i) - 48;
int multiplied = nummer*((i+1)%2)+1); // it will multiply by 2 or 1 (depending on digit position)
int sum = multiplied%10 + multiplied/10 // sum of digits
System.out.println("The sum for " + i + " digit is: " + sum);
当然,您可以使用k0
,k1
,...但您的代码将会非常冗长和复杂。