Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的方法运行了两次?_Java - Fatal编程技术网

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

Java 为什么我的方法运行了两次?,java,Java,当我试图用自己的方法创建自己的类时,该方法运行了两次。我试图转换部分代码以查找故障,但该方法仍然运行了两次 下面是课堂: import java.util.Scanner; public class TestRB { private String userInput; private Scanner scan = new Scanner (System.in); public TestRB () { run(); } publ

当我试图用自己的方法创建自己的类时,该方法运行了两次。我试图转换部分代码以查找故障,但该方法仍然运行了两次

下面是课堂:

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。

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

test.run(); 

来自类TestRunRB。您只需有效地调用该方法两次。

存在两个问题

1) run()方法被调用了两次,因为在调用时它首先在构造函数中运行

TestRB test = new TestRB();
然后再次明确地调用它

test.run();
2) 第二个问题与即使您输入了
y
也将输出打印为No有关,原因是您没有使用
equals
方法进行字符串计算。您应该将现有的
yOrN
方法更改为以下方法

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

希望这有帮助

run()
运行了两次,因为您调用了两次。一次在施工现场,一次在施工结束后。而且,你总是因为这个而被拒绝:啊,谢谢!我现在明白了。所以我不需要
run()那里?我做了一个例子,所以我就把它放在那里。哦,如果我删除类中的第一个方法,程序不会被提示两次?你可以删除TestRunRB中主方法的调用,或者删除TestRB构造函数中第10行的调用。