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

扫描仪收集的输入未被正确处理

罗华翰
2023-03-14

作为一项自我分配的练习,我正在尝试编写一个简单的程序,该程序以生日为准,并确定给定日期所在的一周中的哪一天。计划的第一部分决定了年份。我使用扫描仪收集用户输入,然后使用do while循环测试输入是否可用(必须是数字,必须有四位数字),如果输入不符合标准,则重复该循环。我试图进入1998年,这显然是一个数字和四位数,它重复循环,好像我的输入是无效的。我假设do while循环中的某个地方有问题,但我无法确定它是什么。下面是有问题的代码。

public static boolean isInteger(String input)
{
   try
   {
      Integer.parseInt(input);
      return true;
   }
   catch(Exception e)
   {
      return false;
   }
}
public static void main(String[] args)
{
    String year = "";
    String yearcorrect = "";
    int ylength = year.length();
    boolean yearIsYear = true;
    Scanner scan = new Scanner(System.in);

    do 
    {
        System.out.println("Please enter the year of your birth.");
        year = scan.nextLine();
        boolean yearIsNum = isInteger(year);

        if (yearIsNum = false || ylength != 3)
        {
            System.out.println("Input is not a valid year.");
            yearIsYear = false;
        }
        else 
        {
            System.out.println("You entered the year " + year + ". Is this correct?");
            yearIsYear = true;
            yearcorrect = System.console().readLine();
        }
    }
    while (yearcorrect != "yes" && yearIsYear != true);

共有1个答案

阴迪
2023-03-14

第一个错误:

    if (yearIsNum = false || ylength != 3)

应该是的

    if (yearIsNum = false || ylength != 4)

第二个错误:

正如@ChiefTwoPencils所指出的,ynIsNum=false会将false分配给ynIsNum并且条件永远不会通过。通常java会保护我们免受除...布尔值之外的所有类型的此类错误。为了避免将来出现此类错误(并使您的代码更具可读性),您可以简单地使用! ynIsNum而不是ynIsNum==false或颠倒值的顺序-

第三个错误

您错误地比较了字符串。必须使用str1。等于(str2)。对对象(字符串是对象)使用==比较它们的引用,而不是它们的值。

例如“a”==新字符串(“a”)将等于false

 类似资料:
  • 我正在创建一个用于处理用户输入的类。这样,在其他项目中,我可以从类中调用方法,而不必担心在每个新项目中创建扫描程序。 类中将有一个单独的方法来处理不同的变量类型(float、int、String等)。我从浮动类型开始: 这个方法工作得很好,只是它必须在else部分返回一个float。在本例中,它是一个零,因此当输入到计算器(例如)时,零会导致任何输出等于零。 有没有返回空浮点值的方法来克服这个问题

  • 我正在尝试通过单行输入检索用户输入:例如,使用扫描仪分隔符为Comma5,6,4,8,9。如何使用这种类型的输入检索任意数量的整数?也就是说,不必询问用户希望输入多少个整数。下面是我一直在使用的代码,但是当我想中断时,不能中断while循环。请注意,我保留System.Out以跟踪程序当前运行的位置。令人困惑的是,我可以以这种格式获得用户输入,但程序停止并再次要求用户输入,然后如果输入是一个整数,

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 我试图从用户那里得到2个整数。这是我的代码的相关部分: 起初,它抛出一个,所以我使用了。现在,它只需跳过扫描器并立即调用。

  • 我正在制作一个地下城探索类型的游戏,用户可以输入输入作为一个移动每回合(选择一个方向移动)。然而,我遇到了一个问题与采取扫描仪输入。当我测试我的方法一次,它是正确的,然而,当我把它进入一个while循环,以便我可以从玩家的每一个回合,我得到一个新的移动,在第一次输入后,我得到了一个错误。我不明白为什么我会得到这个错误,因为它不应该每次运行时都扫描新的输入吗?谢谢你的洞察力。 错误如下: 下面是有问

  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。