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

Java 如何进行while循环检查字符串中是否有16位数字,java,string,while-loop,string-length,Java,String,While Loop,String Length,如何使循环检查字符串中是否有16位数字,如果没有足够的数字,如何重置字符串。我正在尝试做一个信用卡程序,将计算支票数字。我有其他一切工作,我只是不能让程序检查用户输入字符串中的位数。感谢任何和所有的帮助 import java.util.Scanner; public class LuhnAlgorithm { public static void main(String[] args) { Scanner input = new Scanner(System.in

如何使循环检查字符串中是否有16位数字,如果没有足够的数字,如何重置字符串。我正在尝试做一个信用卡程序,将计算支票数字。我有其他一切工作,我只是不能让程序检查用户输入字符串中的位数。感谢任何和所有的帮助

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();
    }
}
import java.util.Scanner;
公共类LUH算法{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.print(“输入一个数字信用卡号(输入一个空行退出:”);
字符串nums=input.nextLine();
int i=0;
char chk=nums.charAt(15);
而(!nums.equals(“”){
如果(nums.length()15){//如何使此行重置while循环?
System.out.println(“错误!数字必须正好有16位。”);
}
整数和=0;
对于(i=0;i<15;i++){
char numc=nums.charAt(i);
int num=Character.getNumericValue(numc);
如果(i%2==0){
num=num*2;
如果(数值>=10){
num=num-9;
}
}
sum=num+sum;
}
int sum2=总和%10;
如果(sum2>0){
sum2=10-sum2;
}
int chk2=字符.getNumericValue(chk);
System.out.println(“校验位应为:“+sum2”);
System.out.println(“校验位为:“+chk”);
如果(sum2==chk2){
System.out.println(“数字有效”);
}
否则{
System.out.println(“数字无效”);
}
System.out.print(“输入信用卡号(输入空行退出:)”;
nums=input.nextLine();
}
System.out.println(“再见!”);
input.close();
}
}

只有当
长度==16
时,才可以在if语句中包含您想要完成的代码

意思是,而不是:

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
退出循环。如果他们说的数字太短或太长,请说继续返回提示。 因此:

import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
while(true){
System.out.print(“输入一个数字信用卡号(输入一个空行退出:”);
字符串nums=input.nextLine().trim();
如果(nums.length()==0){
break;//在循环时退出
}
如果(nums.length()!=16){//如何让此行重置while循环?
System.out.println(“错误!数字必须正好有16位。”);
continue;//立即返回到开头
}
//还在这里,处理号码
char chk=nums.charAt(15);
整数和=0;
对于(int i=0;i<15;i++){
char numc=nums.charAt(i);
int num=Character.getNumericValue(numc);
如果(i%2==0){
num=num*2;
如果(数值>=10){
num=num-9;
}
}
sum=num+sum;
}
int sum2=总和%10;
如果(sum2>0){
sum2=10-sum2;
}
int chk2=字符.getNumericValue(chk);
System.out.println(“校验位应为:“+sum2”);
System.out.println(“校验位为:“+chk”);
如果(sum2==chk2){
System.out.println(“数字有效”);
}否则{
System.out.println(“数字无效”);
}
}
System.out.println(“再见!”);
input.close();
}
}

为什么?为什么不直接测试
nums.length()==16
?很抱歉,我对编码是新手。你是说在while循环中吗?while(nums.length()==16+!nums.equals(“”)你说的“重置while循环”是什么意思?如果某个东西的长度为16,你已经知道它不是“我需要它打印出错误消息,然后继续运行循环,直到得到准确的位数。在这种情况下,所需的位数是16。感谢您花时间帮助我。感谢您花时间帮助我编写代码。我最终通过添加if语句来修复它,并让else运行其余代码。我不知道“中断”和“继续”,我开始查找它们,并将在将来的代码中使用它们。感谢您提供的信息!
    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();
    }

}