目前正在我的书中进行练习,但是我很困惑(我还没有学习数组,这一章是关于循环,嵌套循环和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/

10-10 09:17