2011-09-14 5 views
2

私は本当にJavaに新しいので、これを行う方法があると確信していますので、私は尋ねます:クラスのメインメソッドを呼び出すことはできますか?メインクラスをメインクラスから呼び出す方法

import java.io.*; 
public class Chemicalcommandline { 
public void start() { 
    String instructions = "This program " 
      + "" 
      + "" 
      + "" 
      + ""; 
    System.out.println(); 
    System.out.println("Chemical Sign: "); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    String chemical = null; 
    try { 
     chemical = reader.readLine(); 
    } catch(IOException ioe) { 
     System.out.println("Error"); 
    } 
    //start very long if 
if (chemical.equals("Ca")) { 
    System.out.println("Calcium"); 

} 
main(); 
} 
public static void main(String[] args) { 
    Chemicalcommandline client = new Chemicalcommandline(); 
    client.start(); 
} 
} 

入力を1つ取得した後にコードが終了しないようにメインを呼び出すにはどうすればよいですか?

+0

これは不要な再帰を招くため、これをしたくないです。単に「悪いアイデア」の見出しの下でそれを分類し、移動してください。 –

+2

* "クラスのメインメソッドを呼び出すことはできますか?" *もちろん、より良い質問は "あなたは**達成しようとしていますか?" Javaを初めて使う人は、間違った戦略を使ってこれを達成しようとしている可能性があります。 –

答えて

1

いいえ、この方法でメインを呼び出すことはできません。 whileループを使用して、入力の読み値にある何らかの端末条件を使用します。

1

なぜメインを呼び出すのですか?あなたのスタートメソッドから? !!これは無限の再帰呼び出しで終了します。メインは開始を呼び出し、開始はメインを呼び出す あなたがそれを主張するなら、あなたは以下を行うことができます。 開始メソッドのシグネチャがどのように変更され、どのようにnullをmainに渡すかを参照してください。 あなたのケースでは、 "q"などを入力する際に​​ "system.exit"を実行する特別な処理コードを書かない限り、このプログラムは終了しません。

import java.io.*; 
public class Chemicalcommandline { 
public static void start() { 
    String instructions = "This program " 
      + "" 
      + "" 
      + "" 
      + ""; 
    System.out.println(); 
    System.out.println("Chemical Sign: "); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    String chemical = null; 
    try { 
     chemical = reader.readLine(); 
    } catch(IOException ioe) { 
     System.out.println("Error"); 
    } 
    //start crazy motherfucking long if 
if (chemical.equals("Ca")) { 
    System.out.println("Calcium"); 

} 
main(null); 
} 
public static void main(String[] args) { 

    Chemicalcommandline.start(); 
} 
} 

は、私はあなたが繰り返しmain方法である何をしようとしていた気づい

import java.io.*; 
public class Chemicalcommandline { 
public static void start() { 
    String instructions = "This program " 
      + "" 
      + "" 
      + "" 
      + ""; 
    System.out.println(instructions); 
    System.out.println("Chemical Sign: "); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    String chemical = null; 
    try { 
     chemical = reader.readLine(); 
     if(chemical.equals("exit")){ 
      System.exit(0); 
     } 
    } catch(IOException ioe) { 
     System.out.println("Error"); 
    } 
    //start crazy motherfucking long if 
if (chemical.equals("Ca")) { 
    System.out.println("Calcium"); 

} 
main(null); 
} 
public static void main(String[] args) { 
    //Chemicalcommandline client = new Chemicalcommandline(); 
    Chemicalcommandline.start(); 
} 
} 
6

を推奨しました。

mainメソッドを呼び出すのではなく、設計上の決定が悪いと思われるものを繰り返し呼び出すことができます。

あなたが繰り返し何かをしたい場合は、このフォームを使用することができます:あなたはループをやって停止する必要がある場合

public static void main(String[] args) { 
    boolean endCondition = false; 

    while(!endCondition) { 
     Chemicalcommndline.start(); 
     endCondition = shouldEndCheck(); 
    } 
} 

shouldEndCheckメソッドがtrueを返します。

あなたは有効な入力をチェックしたい場合は、このフォームを使用することができます。

public static void main(String[] args) { 

    String input = ""; 
    do { 
     input = readInput(); 
    } while (!validInput(input)); 

    processInput(input); 
} 

readInput、(それは単純なものかもしれない)ユーザによって提供さStringを返し validInputはブールメソッドし、戻りますtrueあなたの入力が有効であると考えられる場合は、 とprocessInputが有効な入力で選択したものです。

こちらがお役に立てば幸いです。ここで

0

は夫婦の良いクラス設計プラクティスを示して別の例

文を使用して、ブール条件付きループのクラス

を使用し、インスタンス化するmainメソッドのクラスのコンストラクタ

の使用でありますループを終了する方法について

import java.io.*; 
public class Chemicalcommandline { 

//class constructor 
public Chemicalcommandline(){ 
    start(); 
} 

public static void start() { 

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    String chemical = null; 
    Boolean done = false; 

     while(!done){ 
     String instructions = "This program " 
       + "" 
       + "" 
       + "" 
       + ""; 
     System.out.println(instructions); 
     System.out.println("Chemical Sign: , enter exit to end"); 

     try { 
      chemical = reader.readLine(); 
      if(chemical.equals("exit")){ 
       done = true; 
      } 
     }catch(IOException ioe) { 
      System.out.println("Error"); 
     } 

     if (chemical.equals("Ca")) { 
      System.out.println("Calcium"); 
     }else{ 
      System.out.println("not sure what that is..."); 
     } 

     }// end while 
    }//end method start 

    public static void main(String[] args){ 
     new Chemicalcommandline(); 
    } 

}//end class Chemicalcommandline 
関連する問題