虽然循环重复太多次

时间:2018-10-04 16:21:54

标签: java loops while-loop

我是计算机科学工程专业的第一年,目前正在学习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");
            }
        }

        }
    }
}

2 个答案:

答案 0 :(得分:0)

您没有在正确的位置结束第一个循环。

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

然后从代码底部删除}

答案 1 :(得分:0)

此循环重复8次,但实际上应在第一个循环后停止。有两种方法可以做到这一点。首先,您可以添加“ break”;在最后一个周期的末尾。其次,根本不能使用“ while(pos <16){}”循环。两种变体都会给您相同的结果。

以下是变体:

public class Various {

public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0;
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);

System.out.println("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;

        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");
        }
//            break;
//        }
       }

    }
  }