Java 如何进行while循环检查字符串中是否有16位数字
如何使循环检查字符串中是否有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
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();
}
}