2017-11-16 5 views
-1

私のmainメソッドからisATensメソッドを呼びたいのですが、isATensがパラメータを持たない場合にのみ行うことができます。私は呼び出し元に同じパラメータを入れようとしましたが、それはどちらかを認識していないようです。mainメソッドからの可変パラメータを持つメソッドを呼び出す方法は?

public class P1L4 { 

    public static void main(String[] args) { 
     P1L4 main = new P1L4(); 
     main.run(); 
     isATens(userInput); //<--- this is what I've tried doing. 
    } 

    public void run() { 

     Scanner scanner = new Scanner(System.in); 
     System.out.println("Name a tens and i'll test if it's one under 100."); 
     int userInput = scanner.nextInt(); 
    } 

    public boolean isATens(int userInput) { 
     System.out.println(userInput); 
     switch (userInput) { 
      case 10 : case 20 : case 30 : case 40 : case 50 : case 60: case 70: case 80: case 90 : 
       isUnderOneHundred(continued); 
      default : 
       System.out.println("Not under one hundred"); 
     } 
     return true; 
    } 

    public boolean isUnderOneHundred(int continued) { 
     return true; 
    } 
} 
+0

userInputは変数ではなく、 isATens(5)、またはisATens()を使用してvalue.tryを指定することもできません。また、isATensは静的メソッドではないので、クラス – Stultuske

+0

のインスタンスを介して呼び出す必要があります。main.isAtens(5)も呼び出す必要があります。 isUnderOneHundredメソッドは無意味です。 'run'メソッドの – pecks

+0

:' Scanner'の読み込み後に 'isAtens(userInput)'。 – AxelH

答えて

1

まだ学習していないと思われるいくつかのJavaの概念があります。スコープとインスタンスの違いに対する静的な方法です。私の次のコメントを理解することが困難な場合は、Java教科書の適切な章をお読みください。

int userInput = scanner.nextInt();は、run()メソッドのスコープ内で宣言されているため、main()メソッドでは表示されません。あなたはrun()メソッドのuserInput外を見たい場合は、私はそれそのメソッドの戻り値を作ると思います:

public int run() { 
    ... 
    int userInput = scanner.nextInt(); 
    return userInput; 
} 

どの種類を使用するときは、目に見えるコンセプトせずにインスタンスと静的メソッドを混合しています。静的メソッドからインスタンスメソッドを呼び出す場合は、ドットの前にインスタンス名を付ける必要があります。少なくともの問題を解決した後でisATens(userInput);の代わりにmain.isATens(userInput);にする必要があります。

プログラムのロジックが異常です。私はisUnderOneHundred(int continued)のようなメソッドは、パラメータが100未満の場合にtrueを返すと期待していますが、そのメソッドはそのパラメータを見ていなくても、渡す数値に対してtrueを返します。

関連する問題