当前位置: 首页 > 知识库问答 >
问题:

在while循环中重复错误消息[重复]

乐正乐湛
2023-03-14

我目前正在学习UdemyJava课程,并正在练习我迄今为止学到的东西。

我有以下简单的程序,我计划使用它来让用户输入他的名字。

import java.util.Scanner;



public class Adventure {
    public static final int menuStars = 65;
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        String firstName = "";
        String lastName = "";
        boolean validName = false;
        while(!validName){
            //Entering first name
            System.out.println("Please enter your first name.");
            try {
                firstName = input.nextLine();
                if(firstName.length() == 0){
                    throw new Exception("Please enter a first name of at least 1 character.");  
                }else{
                    //Entering last name
                    System.out.println("Please enter your last name.");
                    lastName = input.nextLine();
                    if(lastName.length() == 0){
                        throw new Exception("Please enter a last name of at least 1 character");
                    }else{
                        System.out.println("You have entered " + firstName +" " + lastName);
                    }

                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
                continue;
            }
            //Used to terminate loop when both first & last names are valid
            validName = true;
        }


    }
}

我想让程序在用户输入空白名称时重复错误消息,而不是从头开始重新启动整个程序。

例如,当用户输入一个空白的名字时,我希望程序继续重复“请输入至少1个字符的名字”,当用户输入一个空白的姓氏时,程序继续重复“请输入至少1个字符的姓氏”,直到用户输入一个有效的名字。

然而,当前当用户输入一个空白的名字或姓氏时,我的程序将从一开始就重复自己,而不仅仅是重复错误消息。

我如何让程序重复错误消息?

共有3个答案

宗政卓
2023-03-14

空白实际上被视为字符,因此(长度==0)的检查不适用于您的目的。

虽然下面的代码是不完整的(例如:处理firstname="foo"的潜在不良情况,(见函数。包含())),它做了原始帖子要求的事情——当用户输入一个空白的名字/姓氏时,它会不断重复“请输入至少1个字符的名字/姓氏”,直到用户输入一个有效的名字/姓氏。

import java.util.Scanner;

public class Adventure {
    public static final int menuStars = 65;
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        String firstName = "";
        String lastName = "";

        boolean firstNameLegal = false;
        boolean lastNameLegal = false;

        // Entering first name
        while (!firstNameLegal) {
            System.out.println("Please enter your first name.");
            firstName = input.nextLine();

            if (!firstName.equals(" "))
                firstNameLegal = true;
            else
                System.out.println("Please enter a first name of at least 1 character.");  
        }

        // Entering last name
        while(!lastNameLegal){
            System.out.println("Please enter your last name.");
            lastName = input.nextLine();

            if(!lastName.equals(" "))
                lastNameLegal = true;
            else
                System.out.println("Please enter a last name of at least 1 character.");
        }

        System.out.println("You have entered " + firstName +" " + lastName);
    }
}
池宸
2023-03-14

我还没有测试过它,但我猜它可能是这样的,如果没有try/catch,它对我来说就像你在代码中使用它一样毫无意义

String firstName = "";
String lastName = "";
System.out.println("Please enter your first name.");
firstName = input.nextLine();
while(firstName.length<1){
   System.out.println("Please enter a first name of at least 1 character.");
firstName = input.nextLine();
   }
lastName=input.nextLine();
while(firstName.length<1){
    System.out.println("Please enter a last name of at least 1 character.");
    lastName = input.nextLine();
}
System.out.println("You have entered " + firstName +" " + lastName);

编辑,一些关于异常的基本信息try cat用于意外情况发生时,您试图找到绕过它的方法。例如,如果在某个时候预期一个10个位置的数组,并且正在使用一个较小的数组(假设是4个位置)。那么这将导致异常,导致程序在没有进一步信息的情况下终止。

使用try-catch,您可以检查问题所在,并尝试通知用户做某事(如果可以的话)或使用系统以更好的方式关闭程序。例如exit(),并保存在此之前完成的所有工作

另一个例子是,如果您要求2个数字进行加法。如果用户输入字母而不是数字,则intsum=numbA numbB;将抛出并异常。这当然可以使用if来处理。但更好的是这样的东西

金正阳
2023-03-14

当“请输入您的名字”时,使用存储true的布尔变量已打印。每次打印此字符串之前,请检查此变量是否为false。此外,在循环之前将其初始化为false。姓氏也是这样。

if(!printed)
{
  System.out.println("Please enter your first name.");
  printed=true;
}
 类似资料:
  • while循环开始之前的语句没有打印,并且从1开始没有打印循环中的值。相反,它从一个随机的大int开始打印。

  • 在js中,当在forEach函数中遍历arrayitems时,我遇到了一个问题。我只是有一个ID数组,其中一些ID不到10个字符,我想在开头用“0”填充这些字符。示例:在这种情况下,我想用填充最后一项。当然,它也可以在各种其他方式,但我只是不明白为什么它不起作用。 下面是我的代码:

  • 我在循环中输入name和num时出错,

  • 你好,我试图跳过一些错误消息并通过将空csv写入我的工作d目录来继续循环。 问题是没有is。我知道的错误()?我不知道如何实现try()包装器来获得所需的结果。

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 为什么此代码给出“无法访问的语句”错误? 这个问题似乎很简单,我在一本书中发现了这个问题。如果有人帮助我弄清楚为什么我出错了。 我认为,根据我的看法,输出应该 在dooutside内部* 。但是,它显示了 编译器错误:Unreachable Statement 。然后,我试图找出原因,它显示了 **编译错误:Unreachabl

  • 我目前有两个循环,一个获取时间戳,另一个while循环根据时间戳查找映射信息并以某种方式输出。 我的问题是我目前正在循环浏览一个文本,并希望它在第二个循环的isdo="N"时再次从头开始读取文件,但是,情况似乎并非如此。 迄今为止的代码: