2017-01-27 5 views
-2

これは本当に簡単な質問への答えを探して約1時間StackOverflowをサーフィンしていますが、この特定の状況には該当しないようです。どのようにして私のメインメソッドのpublic voidメソッドをJavaで実装できますか

import java.awt.Color; 
public class Question15 { 

    public void fillCheckerBoard(Color[][] board){ 

     for(int n = 0; n < board.length; n++){ 

      for(int k = 0; k < board[0].length; k++){ 

       if((k%2==0 && n%2 ==0)||(k%2==1 && n%2 ==1)){ 
        board[n][k] = Color.black; 
       } 
       else{ 
        board[n][k] = Color.white; 
       } 

       if(board[k][n] == Color.black){ 
        System.out.print("x"); 
       } 
       else 
        System.out.print(" "); 
      } 
     } 


    } 

    public static void main(String[] args) { 


     Color [][] a = new Color [4][5]; 
     Question15 b = new Question15(); 
     b.fillCheckerBoard(a); 
     System.out.print(b); 
    } 

} 

createCheckerBoardカラー[] []アレイを取り込み、2次元アレイ内の指定された寸法にチェッカーボードを作成する方法。

メインメソッドでは、 "a"という2Dカラー配列と "b"という名前の新しいオブジェクトを作成しました。私は入力として "a"を使用して、fillCheckerBoardメソッドをテストしたいと思っています。 "a"が変更されると、 "a"を出力して、fillCheckerBoardが動作するかどうかを確認したい。 Question15オブジェクトを作成しました。なぜなら、voidメソッドが動作するためにはオブジェクトを必要としているからです。

私がvoidメソッドで行ったことは、プログラムを実行しようとするとエラーを返すだけです。私のメソッドが実際にチェッカーボードを印刷できるかどうかをテストするにはどうすればよいですか?

+0

質問が分かりません。あなたは何が起こると予想されていますか、実際に何が起こっていますか? – shmosel

+0

アプリケーションを実行しようとしましたか?このコードはコンパイルされて実行されますが、2つのバグ(1つは2番目のループにあり、2番目は印刷時にボードの色を確認しています)のためにArrayIndexOutOfBoundsExceptionがスローされます。 –

+1

[Java - 2次元配列を印刷する]の可能な複製(http://stackoverflow.com/questions/7782080/java-printing-two-dimensional-array)...コードの他の問題をカバーしていない可能性もあります。あなたが望むものを正確には印刷しません... –

答えて

-2

あなたは色配列にのみ4行を持っているので、次の行がArrayIndexOutOfBoundExceptionを投げされ、このラインは、(ボード[K] [n]の場合に色配列

の5行にアクセスしよう== Color.black){

ロジックに問題があるかもしれません。

+1

問題は、ボード変数は 'board [n] [ k] 'ない' board [k] [n] ' – ChickenFeet

0

あなたのメソッドが引数aを受け渡すように変更されていることを考えれば、おそらくそれを代わりに印刷したいと思うでしょう。 System.out.println(Arrays.deepToString(a))を試みる代わりに、System.out.println(b)

+0

実際には変数 'a'を変更しませんか?それは 'a'を渡しますが、決して何も返しません。変更された変数はパラメータ 'board'で返されません。 – ChickenFeet

+0

よく、 'a'を変更しています。' a'と 'board'はメモリ内の同じ配列の2つの名前です。あなたの質問から推測していますが、それはあなたが望む/必要とするより複雑な概念です。 – Mshnik

+0

私はJavaが価値によって参照で渡されなかったと思った。したがって、これらの2つの変数には2つの異なるメモリブロックが必要です。 – ChickenFeet

1

まず、あなたの質問はかなり曖昧です。しかし、私が理解できる限り、チェッカーボードを作成し、それをXとOで埋める必要があります。チェッカーボードを作成して表示するには、Javaアプレットクラスが必要です。 Javaアプレットクラスの特徴の1つは、メインメソッドを必要としないことです。 次のコードは、入力に応じてチェッカーボードを作成します。

import java.applet.Applet; 
import java.awt.Color; 

import java.awt.Graphics; 

public class Checkerboard extends Applet { 

private static final long serialVersionUID = 1L; 

    public void paint(Graphics g) { 

     int row; 
     int col; 
     int x, y; 

     for (row = 0; row < 4; row++) { 

      for (col = 0; col < 5; col++) { 
       x = col * 40; 
       y = row * 40; 
       if ((row % 2) == (col % 2)) { 
        g.setColor(Color.white); 
       } else { 
        g.setColor(Color.black); 
       } 
       g.fillRect(x, y, 40, 40); 
      } 

     } 

    } 
} 

または、出力を印刷するためにmainメソッドを使用する場合は、Colorクラスが必要ありません。引数として通常の2次元配列を渡すことができます。私はずっとあなたのコードを変更していませんが、次のコードを見て、あなたが必要としているものを見てください。

import java.awt.Color; 

public class Question15 { 

    public void fillCheckerBoard(Color[][] board) { 

     for (int row = 0; row < board.length; row++) { 

      for (int column = 0; column < board[0].length; column++) { 

       if ((row % 2) == (column % 2)) { 
        board[row][column] = Color.black; 
       } else { 
        board[row][column] = Color.white; 
       } 

       if (board[row][column] == Color.black) { 
        System.out.print("X "); 
       } else 
        System.out.print("O "); 
      } 
      System.out.println(""); 
     } 

    } 

    public static void main(String[] args) { 

     Color[][] a = new Color[4][5]; 
     Question15 b = new Question15(); 
     b.fillCheckerBoard(a); 
    } 
} 
関連する問題