为什么我的方法会运行两次?

4

当我尝试创建自己的类和方法时,发现该方法执行了两次。我尝试修改代码以找到问题所在,但是该方法仍然执行了两次。

以下是该类:

import java.util.Scanner;

public class TestRB
{
    private String userInput;
    private Scanner scan = new Scanner (System.in);

    public TestRB ()
    {
        run();
    }

    public void run ()
    {
        System.out.println("Please input y or n.");
        userInput = (scan.next()).toLowerCase();
        while (!userInput.equals("y") && !userInput.equals("n"))
        {
            System.out.println("Invalid input, try again.");
            System.out.println("Please type in \"y\" or \"n.\"");
            userInput = (scan.next()).toLowerCase();
        }
    }

    public boolean yOrN ()
    {
        return (userInput == "y");
    }

    public String toString()
    {
        return userInput;
    }
}

这里是该方法的对象。

public class TestRunRB
{
    public static void main (String[] args)
    {
        TestRB test = new TestRB();
        test.run();

        if (test.yOrN())
            System.out.println("Yes");
        else
          System.out.println("No");
    }
}

无论我输入y还是n,当我被提示两次后,输出总是No。

8
由于您在构造函数中调用了一次run(),然后又在构造后立即再次调用了一次,所以run()方法被运行了两次。此外,您一直得到“no”的结果是因为此原因:https://dev59.com/DnRB5IYBdhLWcg3wyqEd - gla3dr
啊,谢谢!我明白了。所以我不需要在那里加上 run(); 了吗?我之前的例子是这样做的,所以我就加上了。 - Carl Kim
2个回答

4
在TestRB类的构造函数中调用了test.run()方法。您可以在构造函数中删除该调用,或者删除该方法调用。
test.run(); 

从TestRunRB类中调用该方法时,您实际上是在两次调用该方法。


哦,那么如果我在我的类中删除第一个方法,程序就不会提示两次了吗? - Carl Kim
你可以在TestRunRB的main方法中删除调用,或者在TestRB的构造函数中删除调用,该调用似乎出现在第10行。 - Ryan

1

有两个问题。

1)当您调用时,run()方法首先在构造函数中运行,因此会被调用两次。

TestRB test = new TestRB();

然后再显式地调用它一次

test.run();

2) 第二个问题与输出打印有关,即使您输入了y,输出仍然是No。原因是您没有使用equals方法进行字符串评估。您应该将现有的yOrN方法更改为以下内容:

public boolean yOrN ()
  {
    return (userInput.equals("y"));
  }

希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接