java - 将 char 与数字相乘并与 char 相加时出错(Big Java Ex 6.2)

标签 java

目前正在完成我书中的练习,但我被困住了(我还没有学习数组,本章是关于循环、嵌套循环和 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和时间char2 ,我收到信件。我认为我不能将字符乘以 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/

相关文章:

java - 即时应用程序 - 具有可能 firestore 错误的功能模块 默认 FirebaseApp 在此过程中未初始化

Java XMLType 文件修改

java - 将颜色对象转换为字符串

java - 如何在 Eclipse (Swing) 中验证单选按钮?

java - Vaadin 7 应用程序中推送的最小示例 ("@Push")

java - 插入语句的Postgresql错误代码

java - Struts2 排除 com.sun :tools:jar:1. 需要 5.0 吗?

java - 如何在持续集成服务器中使用 FatJar(在 Eclipse 之外)?

java - 刷新添加一个额外的参数

java - 验证 weblogic 中的 JDBC 驱动程序是否已正确更新?