Как исправить логику в моем цикле do-while, а затем применить блок try-catch, чтобы перехватить и отобразить сообщение об ошибке из другого класса? - PullRequest
0 голосов
/ 16 мая 2019

Домашнее задание дает указание создать цикл, запрашивающий входные данные String. Если строка содержит менее 20 символов, она отображает только что введенные данные. Если if содержит более 20 символов, блок catch отобразит сообщение о том, что в строке слишком много символов. Единственный способ завершить программу - ввести DONE. В противном случае он продолжает запрашивать у пользователя строки.

Блок catch отобразит сообщение из другого класса.

Я пытался делать циклы do-while и while.

    do
    {
        System.out.println("Enter strings, enter DONE when finished:");
        userInputLength = input.nextLine();
        try {
        while(userInputLength.length() > 20)
        {
            System.out.println("Please try again:");
            userInputLength = input.nextLine();
        }
        }
        catch(StringTooLongException e) //Error here
        {
            //Not sure how to call the super() in StringTooLongException class.
        }
        while(userInputLength.length() <= 20)
        {
            String message = userInputLength;
            System.out.println("You entered: " + message);
            userInputLength = input.nextLine();
        }
        }
    while(userInputLength.toString() == "DONE");
    }
}

public StringTooLongException()
{
    super("String has too many characters!");
}

Прежде чем я начал получать ошибку в своем блоке catch после добавления обоих блоков try-catch, я смог вывести длинные строки, а затем короткие строки. Но если я попытаюсь написать длинные строки после коротких строк, программа завершится.

1 Ответ

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

это сработает. Посмотрите на мой код и сравните с вашим. Первое: не сравнивайте строки с ==, всегда выбирайте метод equals. Вам не нужен блок 3 whiles, вам нужен только один while и 2 IF один для строки> 20 и другой для строки <20 (посмотрите, если строка содержит ровно длину 20, программа ничего не выдаст) И вам нужно создать собственное исключение, это очень легко. </p>

import java.util.Scanner;

public class ReadString {

public static void main(String[] args) {

    String userInputLength;
    Scanner input = new Scanner(System.in);

    /*
     * . If the String has less than 20 characters, it displays what was just
     * inputted. If if has more than 20 characters, the catch block will display a
     * message stating that the String has many characters. The only way to end the
     * program is to input DONE. Otherwise, it continues to ask the user for
     * Strings.
     */

    do {
        System.out.println("Enter strings, enter DONE when finished:");
        userInputLength = input.nextLine();
        try {
            if (userInputLength.length() > 20) {
                throw new StringTooLongException("String is too long");
            } else {
                System.out.println(userInputLength);
            }

        } catch (StringTooLongException e) // Error here
        {
            System.out.println(e.getMessage());
        }

    } while (!userInputLength.toString().equals("DONE"));

}

Класс исключения

public class StringTooLongException extends RuntimeException{

public StringTooLongException(String message) {
    super(message);
 }
}

Попробуй это понять: D !!!

...