2015-10-20 33 views
3

當我試圖用自己的方法創建自己的類時,該方法運行了兩次。我試着轉換部分代碼來發現故障,但該方法仍然運行兩次。爲什麼我的方法運行兩次?

這裏是類:

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,輸出始終爲否。

+8

'的run()'被運行兩次,因爲你是兩次調用它。一旦進入構造函數,然後在構建之後進行一次。另外,你總是因爲這個而得到「否」:http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – gla3dr

+0

啊,謝謝!我現在明白了。所以我不需要'run();'在那裏?我已經做了一個例子,所以我只是把它放在那裏。 –

回答

4

您在構造函數中爲TestRB類調用test.run()。您可以在構造函數中刪除該調用,或從類TestRunRB中刪除方法調用

test.run(); 

。你只是有效地調用該方法兩次。

+0

哦,所以如果我刪除我的課程中的第一個方法,程序不會被提示兩次? –

+0

您可以在TestRunRB的主要方法中刪除調用,或者在TestRB的構造函數中調用看起來像第10行的調用。 – Ryan

1

有兩個問題。

1)run()方法被調用兩次,因爲它第一次在構造函數中運行時調用

TestRB test = new TestRB(); 

,然後再重新把它明確

test.run(); 

2)第二個問題與打印輸出有關,即使您輸入了y原因是因爲您沒有使用equals方法進行字符串評估。您應該將現有的yOrN方法更改爲以下

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

希望這有助於

相關問題