2017-09-13 9 views
0

上記の例では、先頭のメソッド(initialiseGame)では、最初の引数が "DEFAULT"の場合、boardDEFAULTという名前のファイルを作成しました。今度は、そのメソッドを下のメソッド(printBoard)で呼び出して、topメソッドで設定されたout.println行を読み込みたいとします。ターンで(別のメソッドで作成された)ファイルを後のメソッドに呼び出す

import java.io.IOException; 
import java.io.File; 
import java.io.PrintWriter; 
import java.util.Scanner; 

public class Example { 


public static void initialiseGame(String configFileName, String...args) throws IOException { 
    configFileName = args[0]; 
     if ("DEFAULT".equals(configFileName)) { 
      try { 
       File boardDEFAULT = new File("easy_board.txt"); 
       PrintWriter output = new PrintWriter(boardDEFAULT); 
       output.println("######"); 
       output.println("#@ &2#"); 
       output.println("## ##"); 
       output.close(); 
      } catch (IOException ex) { 
       System.out.println("Error"); 
       return; } 
     }  
} 

public static void printBoard() { 
     if ("DEFAULT".equals(boardDEFAULT)) { 
      String [][] DefaultBoardArray = new String [6][3]; 
       DefaultBoardArray[0][0] = "#"; 
       DefaultBoardArray[1][0] = "#"; 
       DefaultBoardArray[2][0] = "#"; 
       DefaultBoardArray[3][0] = "#"; 
       DefaultBoardArray[4][0] = "#"; 
       DefaultBoardArray[5][0] = "#"; 
       DefaultBoardArray[0][1] = "#"; 
       DefaultBoardArray[1][1] = "@"; 
       DefaultBoardArray[2][1] = " "; 
       DefaultBoardArray[3][1] = "&"; 
       DefaultBoardArray[4][1] = "2"; 
       DefaultBoardArray[5][1] = "#"; 
       DefaultBoardArray[0][2] = "#"; 
       DefaultBoardArray[1][2] = "#"; 
       DefaultBoardArray[2][2] = " "; 
       DefaultBoardArray[3][2] = "#"; 
       DefaultBoardArray[4][2] = "#"; 
       DefaultBoardArray[5][2] = "#"; 
      for (int i=0; i<7; i++) { 
       for (int j=0; j<3; j++) { 
        System.out.print(DefaultBoardArray[i][j] + " "); 
       } 
      } 
     } 
    } 

public static void main(String[] args) { 
     if (args.length == 0) { 
      System.out.println("Error: Too few arguments given. Expected 1 argument, found "+args.length+"."); 
      System.out.println("Usage: MazeGame [<game configuration file>|DEFAULT]"); 
      return; 
     } 
     if (args.length >1) { 
      System.out.println("Error: Too many arguments given. Expected 1 argument, found "+args.length+"."); 
      System.out.println("Usage: MazeGame [<game configuration file>|DEFAULT]"); 
      return; 
     } 

    Scanner keyboard = new Scanner (System.in); 
    String [] Command = new String [2]; 
    Command[0] = keyboard.nextLine(); 
     while (!("help".equalsIgnoreCase(Command[0])) || !("board".equalsIgnoreCase(Command[0])) || !("status".equalsIgnoreCase(Command[0])) || !("left".equalsIgnoreCase(Command[0])) || !("right".equalsIgnoreCase(Command[0])) || !("up".equalsIgnoreCase(Command[0])) || !("down".equalsIgnoreCase(Command[0])) || !("save <file>".equalsIgnoreCase(Command[0]))) { 
       if (!("help".equalsIgnoreCase(Command[1])) || !("board".equalsIgnoreCase(Command[1])) || !("status".equalsIgnoreCase(Command[1])) || !("left".equalsIgnoreCase(Command[1])) || !("right".equalsIgnoreCase(Command[1])) || !("up".equalsIgnoreCase(Command[1])) || !("down".equalsIgnoreCase(Command[1])) || !("save <file>".equalsIgnoreCase(Command[1]))) { 
        System.out.println("Error: Could not file command '"+Command[1]+"'."); 
       } else { 
        System.out.println("Error: Could not file command '"+Command[0]+"'."); } 
      System.out.println("To find the list of valid commands, please type 'help'."); 
      Command[1] = keyboard.nextLine(); 
       if (("help".equalsIgnoreCase(Command[1])) || ("board".equalsIgnoreCase(Command[1])) || ("status".equalsIgnoreCase(Command[1])) || ("left".equalsIgnoreCase(Command[1])) || ("right".equalsIgnoreCase(Command[1])) || ("up".equalsIgnoreCase(Command[1])) || ("down".equalsIgnoreCase(Command[1])) || ("save <file>".equalsIgnoreCase(Command[1]))) { 
        break; 
       } 
      } 

     if (("board".equalsIgnoreCase(Command[0])) || ("board".equalsIgnoreCase(Command[1]))) { 
      printBoard(); 
     } 
    } 
} 

私はboardDEFAULTでハットポインティングで

error: cannot find symbol - if ("DEFAULT".equals(boardDEFAULT)) 

を言って、エラーを取得します。

私はこれを達成する方法がわかりません。ファイルの配列を作成しようとしましたが、それはより多くの問題を引き起こしました。私は方法で初心者のビットです、私はこの初歩的な質問をお詫び申し上げます。

答えて

1

は、おそらくこのような何かをしたい:

public class Example { 
    private boolean isDefault = false; // class member => available in all non static methods 

    public void initialiseGame(String configFileName, String...args) throws IOException { 
     configFileName = args[0]; // NB: this makes no sense 
      if ("DEFAULT".equals(configFileName)) { 
       isDefault = true; 
    // ... 

    public void printBoard() { 
     if (this.isDefault) { 

    // ... 

    public static void main(String[] args) { 
     Example example = new Example(); 
     // use example: example.initialiseGame(...); 
    } 

いくつかの読書:https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html

(また、あなたのコード内でboardDEFAULTFileはそれが"DEFAULT"に等しくなることはありませんであることに注意してください)

+0

ありがとうJavaのドキュメントを見ていきます。 –

0

これは厄介な方法ですが、あるメソッドから別のメソッドに値を渡すには、グローバル変数(静的)を使用する必要があります。

public class Example { 
private static isDefualtConfig = false; // value shared by both methods 

public static void initialiseGame(String configFileName, String...args) throws IOException { 
    configFileName = args[0]; 
     if ("DEFAULT".equals(configFileName)) { 
      isDefualtConfig =true; 
      ... 
} 

public static void printBoard() { 
     if (isDefualtConfig) { 
      String [][] DefaultBoardArray = new String [6][3]; 
... 

通常、静的メソッドは動作しません。 1つの静的メソッドのパラメータが別の静的メソッドで表示されないため、サンプルはコンパイルされません。だから、それらの間で一種のキャッシュとして使用されるフラグを作成する必要があります。

これには1つの欠点があります。 initialiseGameメソッドはすべてのExampleクラスインスタンスに対してグローバルです。

関連する問題