首页 > 解决方案 > 虽然循环重复太多次

问题描述

我是计算机科学工程专业的第一年,我目前正在学习 Java 编程课程。这是我尝试学习的第一种编程语言,但我完全陷入了困境。我必须为类设计一个程序,该程序接受用户输入的信用卡号并确定它是否有效。我不知何故弄乱了我的循环,现在整个事情不断重复至少比我需要的次数多 5 倍。我该如何解决这个问题?3:00 到期,我吓坏了。这是我的代码:

package osu.cse1223;

import java.util.Scanner;

public class Project07 {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner in = new Scanner(System.in);

    System.out.print("Enter a credit card number (enter a blank line to quit):");
    String cardNumber = in.nextLine();

    int length = cardNumber.length();

    if (length != 16 && length > 0) {
        System.out.print("ERROR! Number MUST have exactly 16 digits");
    }
    else if (length <= 0) {
        System.out.println("Goodbye!");
    }
    else {
        char checkDigitChar = cardNumber.charAt(15);
        int checkDigit = Character.getNumericValue(checkDigitChar);

        int pos = 0;
        while (pos < 16) {
            char digit = cardNumber.charAt(pos);
            int number = Character.getNumericValue(digit);
            int doubled = number * 2;
            pos = pos + 2;
            int sum = 0;
            if (doubled > 9) {
                String sub = Integer.toString(doubled);
                char one = sub.charAt(0);
                char two = sub.charAt(1);
                int numOne = Character.getNumericValue(one);
                int numTwo = Character.getNumericValue(two);
                int doubleAdjusted = numOne + numTwo;
                sum = sum + doubleAdjusted;
            }
            else {
            }
            int newPos = 1;
            int newSum = 0;
            while (newPos < 16) {
                char digitForSum = cardNumber.charAt(newPos);
                int individualNum = Character.getNumericValue(digitForSum);
                newPos = newPos + 2;
                newSum = individualNum + newSum;
            }

            int total = sum + newSum;
            String subTwo = Integer.toString(total);
            char onesPlace = subTwo.charAt(1);
            int ones = Character.getNumericValue(onesPlace);
            int realCheckDigit = 10 - ones;

            System.out.println("Check digit should be: " + realCheckDigit);
            System.out.println("Check digit is: " + checkDigit);

            if (checkDigit == realCheckDigit) {
                System.out.println("Number is valid");
            }
            else {
                System.out.println("Number is not valid");
            }
        }

        }
    }
}

标签: javaloopswhile-loop

解决方案


你没有在正确的地方结束你的第一个循环。

int doubleAdjusted = numOne + numTwo;
sum = sum + doubleAdjusted;
}
else {
}
}// ADD THIS TO END THE FIRST WHILE LOOP

}并从代码底部删除 a 。


推荐阅读