Хотите, чтобы Java проверяла, чтобы строка была ТОЛЬКО заглавной и содержала от 2 до 4 цифр. [closed]

Пользователь должен вводить от 2 до 4 заглавных букв и просить пользователя ввести еще раз, пока это не произойдет. Когда я запускаю программу, если пользователь вводит более 4 букв, программа попросит пользователя ввести еще раз, но если он введет строчные буквы, она продолжит выполнение программы. Нужен ли 2D-массив? Любая помощь приветствуется. Спасибо

public static String info() {
    Scanner sc = new Scanner(System.in);
    char ch;
    System.out.println("Course ID Generatorn--------------------------");
    System.out.println("Please Enter Course Information:");
    boolean lower = false;
    String code = "";
    while (true) {
        System.out.print("Course Code (only capital letters with a length between 2 and 4):");
        code = sc.nextLine();

        if (code.length() >= 2 & code.length() <= 4) {
            break;
        } else {
            System.out.println("Course Code length was not between 2 and 4, Please try again");

        }

        for (int i = 0; i < code.length(); i++) {
            ch = code.charAt(i);
            if (Character.isUpperCase(ch)) {
                lower = false;
                break;
            } else if (lower == true) {
                System.out.println("Course Code must only have capital letters, please try again");

            }

        }
    }
    sc.close();
    return ("");

}

1 ответ
1

Я немного изменил ваш код. Вот результаты одного из моих тестовых запусков.

Course ID Generator
--------------------------
Please Enter Course Information:
Course Code (only capital letters with a length between 2 and 4): 1223
Course Code must only have capital letters, please try again
Course Code (only capital letters with a length between 2 and 4): asd
Course Code must only have capital letters, please try again
Course Code (only capital letters with a length between 2 and 4): ASDFGH
Course Code length was not between 2 and 4, Please try again
Course Code (only capital letters with a length between 2 and 4): QWE
QWE

Вот измененный код.

import java.util.Scanner;

public class CourseCodeCheck {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(info(sc));
        sc.close();
    }

    public static String info(Scanner sc) {
        System.out.println("Course ID Generatorn--------------------------");
        System.out.println("Please Enter Course Information:");
        String message = "Initial";
        String code = "";
        
        while (!message.isEmpty()) {
            if (!message.equals("Initial")) {
                System.out.println(message);
            }
            
            System.out.print("Course Code (only capital letters "
                    + "with a length between 2 and 4): ");
            code = sc.nextLine();
            
            message = checkLength(code);
            if (message.isEmpty()) {
                message = checkUpperCase(code);
            }
        }
        
        return code;
    }
    
    private static String checkLength(String code) {
        String output = "";
        if (code.length() < 2 || code.length() > 4) {
            output = "Course Code length was not between "
                    + "2 and 4, Please try again";
        }
        return output;
    }
    
    private static String checkUpperCase(String code) {
        String output = "";
        for (int i = 0; i < code.length(); i++) {
            char ch = code.charAt(i);
            if (Character.isAlphabetic(ch) && Character.isUpperCase(ch)) {
            } else {
                output = "Course Code must only have capital "
                        + "letters, please try again";
                break;
            }
        }
        return output;
    }

}

Основные изменения, которые я сделал, заключались в перемещении Scanner вне info метод, поместите каждое условие в отдельный метод, проверьте алфавитный и верхний регистр и используйте пустой String чтобы выйти из цикла while, когда ошибок не было.

Логическое И в if утверждение – двойной амерсанд (&&). Логическое ИЛИ в if заявление есть ||.

  • 2

    Обратите внимание, что вопросы, связанные с кодом, который работает не так, как задумано, на этом сайте не по теме. Если OP редактирует свое сообщение, чтобы решить проблему и сделать свое сообщение по теме, они сделают ваш ответ спорным. На такие вопросы рекомендуется не отвечать.. Совет: нужно ответить на множество вопросов по теме; вы быстрее заработаете себе репутацию, если проанализируете код в вопросах, которые получат большее количество просмотров из-за того, что они соответствуют теме.

    – БУДЕТ ONᴇᴌᴀ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *