Как сделать, пока l oop проверяет, есть ли в строке 16 цифр - PullRequest
1 голос
/ 18 февраля 2020

Как заставить l oop проверить, есть ли в строке 16 цифр, и сбросить строку, если ее недостаточно. Я пытаюсь сделать программу кредитной карты, которая будет рассчитывать чек ди git. У меня все остальное работает, я просто не могу заставить программу проверить количество цифр в строке, введенной пользователем. Спасибо за любую помощь!

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();
    }
}

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Вы можете перенести подсказки и всю вашу инициализацию, кроме самого сканера, в l oop. Затем, если они говорят "", break, чтобы выйти из l oop. Если они говорят, что число слишком короткое или слишком длинное, скажите продолжить до go обратно к подсказке. Таким образом:

    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();
    }

}
1 голос
/ 18 февраля 2020

Вы можете включить свой код, который вы хотите выполнить, только если length ==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
}

(Я также хочу отметить, что вы устанавливаете chk = nums.charAt(15) перед вашим временем l oop, но вы не будете сбрасывать его в то время как l oop в следующий раз, когда пользователь вводит новый номер кредитной карты.)

...