目前正在完成我书中的练习,但我被困住了(我还没有学习数组,本章是关于循环、嵌套循环和 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/