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

时间:2015-10-20 22:54:18

标签: java

当我尝试用自己的方法创建自己的类时,该方法运行了两次。我试着转动部分代码来发现故障,但该方法仍然运行了两次。

这是班级:

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,我都会在提示两次后输出始终为“否”。

2 个答案:

答案 0 :(得分:4)

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

test.run(); 
来自TestRunRB类的

。你只是有效地调用该方法两次。

答案 1 :(得分:1)

有两个问题。

1)run()方法被调用两次,因为它在调用

时首先在构造函数中运行
TestRB test = new TestRB();

然后再次明确地再次调用它

test.run();

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

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

希望这有帮助