2017-01-27 31 views
-2

我一直在瀏覽StackOverflow大約一個小時尋找這個非常簡單的問題的答案,但似乎沒有適用於這種特定的情況。我如何在我的主要方法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方法需要一個Color [] []數組,並創建一個2D數組中指定尺寸的棋盤。

在主要方法中,我創建了一個名爲「a」的2D Color數組和一個名爲「b」的新對象。我想用「a」作爲輸入來測試fillCheckerBoard方法。一旦「a」被修改,我想打印出「a」來查看我的fillCheckerBoard是否工作。我提出了一個Question15對象,因爲據我所知,一個void方法需要一個對象才能工作。

我在void方法中所做的操作只會在嘗試運行該程序時返回錯誤。我如何測試我的方法是否可以實際打印棋盤?

+0

我不明白這個問題。你期望發生什麼,實際發生了什麼? – shmosel

+0

你剛剛嘗試運行你的應用程序?此代碼將編譯並運行,但會由於2個錯誤(一個在第二個循環,第二個在打印時檢查紙板顏色)而拋出ArrayIndexOutOfBoundsException。 –

+1

[Java - 打印二維數組]的可能重複(http://stackoverflow.com/questions/7782080/java-printing-two-dimensional-array)...也不包括代碼的其他問題,可能不打印你想要的東西...... –

回答

-2

的下面線投擲ArrayIndexOutOfBoundException因爲你必須在顏色陣列只有4行和該行試圖訪問顏色陣列的第五行

如果(板[K] [n]的== 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'是內存中同一個數組的兩個名字。雖然從你的問題中猜測,這是一個比你想要/需要更復雜的概念。 – Mshnik

+0

我以爲java沒有通過引用傳遞,而是通過價值。所以這兩個變量應該有兩個不同的內存塊,對吧? – ChickenFeet

1

首先你的問題很模糊。但據我所知,你需要創建一個棋盤,並用X和O填充它。現在爲了創建並顯示棋盤,您將需要Java applet類。 Java Applet類的一個特性是它不需要主要的方法。 以下代碼根據輸入創建檢查器板。

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); 
      } 

     } 

    } 
} 

或者,如果您希望使用主要方法來打印輸出,那麼您將不需要Color類。你可以通過傳遞一個普通的2 dim數組作爲參數。我沒有修改過你的代碼,但請仔細閱讀下面的代碼,看看你需要什麼。

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); 
    } 
} 
相關問題