2017-01-20 25 views
-1

我對Java非常陌生,而且我很難搞清楚如何從命令提示符獲取參數並在代碼中傳遞它們。我能夠讓他們進入我的代碼的主要方法,但我寧願讓他們在棋盤類。有一個硬編碼的公共靜態int,但我希望它是我發送的任何參數。我稍後將爲女王的安置採取初步立場,所以我希望這個過程會相似;如果我得到這個幫助,希望我可以使用相同的技術。如何傳遞這些參數(java)?

public class Chessboard { 

public static void main(String[] args) { 


    System.out.println("Hello World"); 
    Chessboard board = new Chessboard(); //creates a Chessboard object 
    board.start();       
} 

public static int n = 8;         
private static int board[][]; //this is the Chessboard array 
private int numQueens; //this is the number of queens on the board 


public Chessboard(){ 
    numQueens = 0; //initialized to zero, no queens on board to start yet 
    board = new int[n][n]; //nxn 2D array of zeros 
    for (int j = 0; j < n; j++) 
    { 
     for (int k = 0; k < n; k++) 
     { 
      board[j][k] = 0; //redundant, but I need to learn how to 
     }      //initialize. this manually puts zeros into 
    }       //the array 
} 

...代碼從這裏繼續,但我不認爲這是必要的。如果是這樣,我很樂意上傳它。

謝謝你的時間。

+0

可能重複的[如何將命令行參數動態傳遞到主要方法](http://stackoverflow.com/questions/8756377/how-to-pass-command-line-arguments-to-main-method-dynamically ) –

+0

我不認爲這是這個問題的重複。 –

+0

'靜態'不是一個交叉對象的通信機制,你應該學會盡快沒有它。也許先看看[將信息傳遞給方法或構造函數](https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html) – MadProgrammer

回答

1

這是我會做的。

public static void main(String[] args) { 
    try { 
     int firstArg = Integer.parseInt(args[0]); 
     Chessboard board = new Chessboard(firstArg); 

     // Do some stuff with the chessboard here. 

    } 
    catch(NumberFormatException e) { 
     System.out.println("That's not a number"); 
    } 
} 

這看起來在第一個命令行參數,並試圖將其轉換爲int。如果成功,它會將該對象int傳遞給構造函數Chessboard以供您使用。

該代碼片段還顯示瞭如何在第一個命令行參數實際上不是數字時提供運行的代碼。

+0

謝謝你的信息。我一直在玩它一段時間,我有一些問題... 由於參數'firstArg'傳遞給構造函數,我是否需要指定它將接收'int'參數括號,如'int firstArg'? 我也在編譯其他代碼(另外7種方法),使用變量'n',我似乎無法修復錯誤。有什麼辦法可以將'firstArg'傳遞給我的'public static int n'嗎? – choblet

+0

當你有'公共棋盤(int n)'時,你有正確的想法。我不確定爲什麼你在那之後改變了你的問題。 –

+0

我終於明白了。 在主類中,我使用了'Chessboard.n = Integer.parseInt(args [0])',並在'public class Chessboard'中創建了'public static int n;'。 謝謝你的幫助。儘管我沒有完全使用它,但它指出了我的正確方向。 – choblet

-1

在你的棋盤類創建

private String[] args; 

然後添加一個設置器,棋盤狀:

public void setArgs(String[] args{ 
    this.args = args; 
} 

然後把這樣的事情在你的主:

public static void main(String[] args) { 

    Chessboard board = new Chessboard(); 
    board.setArgs(args); 
    board.start();           
} 
0

注意主要方法已經在你的Chessboard類中。如果你想讓你的n變量保持靜態,你可以在main方法中做這個。

n = Integer.parseInt(args[0]); 

如果您n實例變量而不是它是靜態的,那麼大衛·華萊士給出的答案將指向您在正確的方向。

+0

爲了達到這個目的,OP還必須從'Chessboard'構造函數的簽名中刪除參數。 –

+0

我想到了這一點,但他的主要方法已經創建了一個沒有任何參數的「棋盤」。我以爲他有一個默認的構造函數,並沒有把它放在這裏。你是100%正確的,但。 –

+0

哦,我只是假設OP發佈了沒有編譯的代碼,而不是省略一些代碼。 –