Проверка типа ввода и диапазона целых чисел в Java - PullRequest
0 голосов
/ 17 октября 2018

Вот фрагмент кода, над которым я работаю для более крупного проекта:

import java.util.Scanner;

public static void getZip() {
   boolean shallNPass=true;
   int zip=0;

   System.out.print("Enter zipcode: ");
    while(shallNPass) {
        if(in.hasNextInt()) {
            zip = in.nextInt();
            if(zip>999 && zip<100000)
                zip = in.nextInt();
            else {
                System.out.println("Incorrect length for a zip. Try again");
                System.out.print("Enter zipcode: ");
                continue;
            }
            shallNPass = false;
        }
        else {
            System.out.println("Invalid Entry. Please use an integer.");
            System.out.print("Enter zipcode: ");
            continue;
        }
        shallNPass = false;
    }   shallNPass = true;  //RESETTING SHALLNPASS

    System.out.println(zip);
    //In actuality I continue to do another similar while loop similar after this
    //but I don't want to make this longer, so used a print
}

Он основан на решении, которое я нашел здесь относительно проверки, что пользователь вводит значение определенного типа.Я просто сделал еще один шаг и попытался проверить, что введенное значение находится между 1000 и 99999.

У меня проблема в том, что после ввода целого числа правильной длины я должен ввести его сновачтобы заставить программу перейти к следующей строке кода.У меня нет этой проблемы при проверке типа, только когда я добавляю длину.

Как я могу это исправить?Я пробовал всевозможные трюки с циклами продолжения, разрыва и вложенных циклов, просто я этого не вижу.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Большое спасибо, вот мое исправленное решение.Предполагается сохранить расширенное вложенное выражение if в интересах избавления от продолжения.Чтение без них казалось немного более понятным.

System.out.print("Enter zipcode: ");
    while(shallNPass) {
        if(in.hasNextInt()) {
            zip = in.nextInt();
            if(zip>999 && zip<100000) 
                shallNPass=false;
            else {
                System.out.println("Invalid Entry. Wrong length for a zip.");
                System.out.print("Enter zipcode: ");
            }
        }
        else {
            System.out.println("Invalid Entry. Please use an integer.");
            System.out.print("Enter zipcode: ");
            in.next();
        }
    }   shallNPass = true;  //RESETTING SHALLNPASS
0 голосов
/ 17 октября 2018

Я вижу здесь, что вы просите об этом снова:

if (in.hasNextInt()) {
    zip = in.nextInt(); // asking for input once
    if (zip > 999 && zip < 100000) {
        zip = in.nextInt(); // if validates, you're asking for input again
    } else {
        System.out.println("Incorrect length for a zip. Try again");
        System.out.print("Enter zipcode: ");
        continue;
    }
    shallNPass = false;
}

Перестройте свой блок if-else:

if (zip <= 999 || zip >= 100000) {
    System.out.println("Incorrect length for a zip. Try again");
    System.out.print("Enter zipcode: ");
    continue;
}

Вам нужно только повторить запрос, если это НЕправильно проверить;Таким образом, вам не нужно else.

...