如何使while循环检查字符串中是否有16位数字

How to make while loop check if there are 16 digits in a string

如何让循环检查字符串中是否有 16 位数字,如果不够则重置字符串。我正在尝试制作一个信用卡程序来计算校验位。我的其他一切都在工作 我只是无法让程序检查用户输入的位数 string.Thanks 以获得所有帮助!

import java.util.Scanner;

public class LuhnAlgorithm {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.print("Enter a number credit card number (Enter a blank line to quit: ");
        String nums = input.nextLine();

        int i = 0;
        char chk = nums.charAt(15);

        while(!nums .equals("") ) {

            if (nums.length()<16 || nums.length() > 15){ //How do I get this line to reset the while loop?
                System.out.println("ERROR! Number MUST have exactly 16 digits.");
            }

            int sum = 0;
            for( i = 0; i < 15; i++) {  
                char numc = nums.charAt(i);
                int num = Character.getNumericValue(numc);
                if ( i % 2 == 0 ) {
                    num = num * 2;
                    if ( num >= 10) {
                        num = num - 9;
                    }
                }
                sum = num + sum;
            }

            int sum2 = sum % 10;
            if (sum2 > 0) {
                sum2 = 10 - sum2;
            }
            int chk2 = Character.getNumericValue(chk);
            System.out.println("The check digit should be: " + sum2);
            System.out.println("The check digit is: " + chk);
            if ( sum2 == chk2) {
                System.out.println("Number is valid.");
            }
            else {
                System.out.println("Number is not valid. ");
            }

            System.out.print("Enter a number credit card number (Enter a blank line to quit:) ");
            nums = input.nextLine();
        }

        System.out.println("Goodbye!"); 
        input.close();
    }
}

您可以在 if 语句中包含您只想在 length ==16 时完成的代码。

含义,而不是:

if (nums.length != 16) {
    //code if there is an error
}
//code if there is no error

你可以做到:

if (nums.length == 16) {
    //code if there is no error
} else {
    //code if there is an error
}

(我还想指出,您在 while 循环之前设置了 chk = nums.charAt(15),但您不会在用户下次输入新信用卡号时在 while 循环中重置它。)

您可以将提示和除扫描仪本身之外的所有初始化都带入 while 循环。然后,如果他们说“”,break 退出循环。如果他们说的数字太短或太长,请说 continue 返回提示。 因此:

    import java.util.Scanner;
public class main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while (true) {
            System.out.print("Enter a number credit card number (Enter a blank line to quit: ");
            String nums = input.nextLine().trim();
            if (nums.length() == 0) {
                break; //exits while loop
            }
            if (nums.length() != 16) { //How do I get this line to reset the while loop?
                System.out.println("ERROR! Number MUST have exactly 16 digits.");
                continue; //goes back to the beginning right away
            }
            //still here, process the number
            char chk = nums.charAt(15);
            int sum = 0;
            for (int i = 0; i < 15; i++) {
                char numc = nums.charAt(i);
                int num = Character.getNumericValue(numc);
                if (i % 2 == 0) {
                    num = num * 2;
                    if (num >= 10) {
                        num = num - 9;
                    }
                }

                sum = num + sum;
            }

            int sum2 = sum % 10;
            if (sum2 > 0) {
                sum2 = 10 - sum2;
            }
            int chk2 = Character.getNumericValue(chk);
            System.out.println("The check digit should be: " + sum2);
            System.out.println("The check digit is: " + chk);
            if (sum2 == chk2) {
                System.out.println("Number is valid.");
            } else {
                System.out.println("Number is not valid. ");
            }





        }


        System.out.println("Goodbye!");


        input.close();
    }

}