目前正在我的书中进行练习,但是我很困惑(我还没有学习数组,这一章是关于循环,嵌套循环和for循环的)
问题的第一部分是取一个信用卡号,然后每隔一个数字就相加
考虑4358 9795
,它应输出总和5+7+8 + 3 = 23
。
这是我的解决方案不起作用
class Checkit{
private String creditNum;
private int sum;
public Checkit(String creditNum)
{
this.creditNum = creditNum;
sum = 0;
}
public int getSum()
{
for (int i = creditNum.length() ; i > 0 ; i--)
{
char ch = creditNum.charAt(i-1);
if(i%2 == 1 )
{
sum+=ch;
}
}
return sum;
}
}
public class test{
public static void main(String [] args)
{
Checkit sampleNumber = new Checkit("4358 9795");
System.out.println(sampleNumber.getSum());
}
}
我不确定自己的逻辑有什么问题。 ch正在获取我的信用卡号5,7,8,3的所有值。但是由于某种原因,这个总和已经搞砸了。
奖金部分
取未加的每个数字并将其加倍,因此
9+9 + 5 + 4
,将每个术语加倍(变为18 + 18 + 10 + 8
),然后得到1 + 8 + 1 + 8 + 1 + 0 + 8
的总和。我尝试了红利部分,但是由于某种原因,每次我得到
9, 9, 5,4
并乘以char
值乘以2
时,都会收到字母。我认为我不能将字符乘以integers
,所以我应该进行转换吗?注意我还没学过arrays
新密码
class Checkit {
private String creditCardNum;
private int sum;
public Checkit(String creditCardNum) {
sum = 0;
this.creditCardNum = creditCardNum;
}
public int getSum() {
creditCardNum = creditCardNum.replaceAll("\\s+", "");
for (int i = creditCardNum.length(); i > 0; i--) {
char ch = creditCardNum.charAt(i - 1);
if (i % 2 == 0) {
sum += Character.getNumericValue(ch);
}
}
return sum;
}
public int doubleDigitSum() {
sum = 0;
creditCardNum = creditCardNum.replaceAll("\\s", "");
for (int i = creditCardNum.length(); i > 0; i--) {
char ch = creditCardNum.charAt(i - 1);
if (i % 2 == 1) {
int newChar = Character.getNumericValue(ch) * 2;
String newCharString = Integer.toString(newChar);
for (int j = 0; j < newCharString.length(); j++) {
char sumThis = newCharString.charAt(j);
sum += Character.getNumericValue(sumThis);
}
}
}
return sum;
}
}
public class DataSet{
public static void main(String [] args) {
Checkit data = new Checkit("4358 9795");
System.out.println(data.getSum());
System.out.println(data.doubleDigitSum());
}
}
最佳答案
您要添加char
值而不是int值。将sum+=ch;
替换为
sum += ch - '0';
之所以与原始解决方案相反,是因为在将
char
值添加到int
值时,char
通过其ASCII值转换为十进制。例如,“ 5”的ASCII十进制值为53。但是,“ 5”-“ 0”等于5。有关这些ASCII值的更多信息,请参见http://www.asciitable.com/。关于java - 将char与数字相乘并与char相加时出错(Big Java Ex 6.2),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38646050/