Как заставить пользователя ввести фиксированное количество чисел для int? - PullRequest
0 голосов
/ 18 мая 2019

Я хочу заставить пользователя ввести число длиной 5 ( не больше и не меньше) и сохраните их внутри переменной int, включая начальный 0.

Например, программа должна позволять пользователю вводить:

12345
04123
00012

Но это не должно работать для:

123456
4123
001

Я пытался ...

  if(int x < 99999){
  //continue with code
  }

Это будет работать только в том случае, если пользователь вводит более 5 длин, но не решает проблему, когда пользователь вводит длину int менее 5

Ответы [ 3 ]

1 голос
/ 18 мая 2019

Я думаю, что вы должны принимать ввод в строке, а не в int, тогда, если проверка прошла правильно, вы можете разобрать его в целое число, как показано ниже:

import java.util.Scanner;

public class main {

public static void main(String[] args) {
    /// take input
    String userInput = "";
    Scanner sc = new Scanner(System.in);
    userInput = sc.nextLine();
    int input ;
    // validation test
    if(userInput.length() == 5) {
        input = Integer.parseInt(userInput);
    }else {
        // you can display an error message to user telling him that he should enter 5 numbers!
    }
}

}

но вы должны знать, что после анализа его в int, если есть ведущие нули, он может исчезнуть.

0 голосов
/ 18 мая 2019

Две функции. Во-первых, чтобы проверить ввод:

static boolean is_valid_number(String x) {
    // returns true if the input is valid; false otherwise
    if(x.length != 5 || Integer.valueOf(x) > 99999) {  
        // Check that both:
        //    - input is exactly 5 characters long
        //    - input, when converted to an integer, is less than 99999
        // if either of these are not true, return false
        return false;
    }
    // otherwise, return true
    return true;
}

и второе, чтобы получить пользовательский ввод:

static int get_user_input() {
    // Create a scanner to read user input from the console
    Scanner scanner = new Scanner(System.in);
    String num = "";
    do {
        // Continuously ask the user to input a number
        System.out.println("Input a number:");
        num = scanner.next();
        // and continue doing so as long as the number they give isn't valid
    } while (!is_valid_number(num));
    return Integer.valueOf(num);

Возможно, вам также придется выполнить некоторую обработку ошибок, если данный ввод не является целым числом. Вы можете реализовать is_valid_number() кратко следующим образом:

static boolean is_valid_number(String x) {
    try {
        return (x.length == 5 && Integer.valueOf(x) <= 99999);
    } catch (NumberFormatException e) {
        // Integer.valueOf(x) throws this when the string can't be converted to an integer
        return false;
    }
}
0 голосов
/ 18 мая 2019

Что-то сумасшедшее простое, как это.Отсутствует обработка по краям (читай: отрицательные значения)

boolean matchesLength(int n, int lengthLim){
    char[] charArr = (n + "").toCharArray();
    return (charArr.length == lengthLim);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...