2017-10-25 13 views
-1

を呼び出すと、私は私のコードを紹介します:2D配列方法は、まずよく

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int a = 0; 
    int b = 0; 

    System.out.println("Welcome to Mine Sweeper!"); 
    a = promptUser(in, "What width of map would you like (3 - 20):", 3, 20); 
    b = promptUser(in, "What height of map would you like (3 - 20):", 3, 20); 

    char[][] map = new char[a][b]; 
    eraseMap(new char[a][b]); 
} 

public static int promptUser(Scanner in, String prompt, int min, int max) { 

    int userInput; 
    System.out.println(prompt); 
    userInput = in.nextInt(); 

    while (userInput < min || userInput > max) { 
     System.out.println("Expected a number from 3 to 20."); 
     userInput = in.nextInt(); 
    } 
    return userInput; 
} 

public static void eraseMap(char[][] map) { 

    for (int i = 0; i < map.length; ++i) { 
     for (int j = 0; j < map.length; ++j) { 
      System.out.print(Config.UNSWEPT + " "); 
     } 
     System.out.println(); 
    } 
    return; 
} 

基本的に、私はシンプルな掃海艇のゲームを作成しようとしているが、これが何をやっていることは、それはゲームマップを印刷していないということですよ幅+高さの代わりに幅のみを使用します。例えば、幅として3、高さとして4を入力すると、出力されます。

. . . 
. . . 
. . . 

これはどのように修正できますか?

答えて

0

変更

for (int j = 0; j < map.length; ++j) { 

i外側アレイmap[i]が内側ものであるからです。また、mapにアクセスしないため、代わりにwidthheightを渡してください。同様に、

public static void eraseMap(int width, int height) { 
    for (int i = 0; i < width; ++i) { 
     for (int j = 0; j < height; ++j) { 
      System.out.print(Config.UNSWEPT + " "); 
     } 
     System.out.println(); 
    } 
} 
+0

@BrianKangそして、あなたが 'a'と' b'の名前を入れ替えると、うまくいくでしょう...それらは非常に貧しい変数名です。これは 'new char [height] [width];で、これを明確にする必要があります... –

0

map.lengthの代わりに、内部ループにmap[i].lengthを使用できます。

for (int j = 0; j < map[i].length; ++j) {