2017-01-20 14 views
-1

Я очень новичок в Java, и мне сложно определить, как принимать аргументы из командной строки и передавать их в моем коде. Я могу использовать их в основном методе моего кода, но я предпочел бы их использовать в классе Chessboard. Существует общедоступный статический int n, который жестко закодирован, но я бы хотел, чтобы это было то, что я отправляю в качестве аргументов. Позже я возьму начальную позицию для размещения королевы, поэтому я надеюсь, что этот процесс будет похож; если я получу помощь в этом, надеюсь, я могу использовать для этого ту же технику.Как передать эти параметры (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

'static' не является механизмом передачи перекрестного объекта, и вы должны научиться жить без него, как только сможете. Возможно, начните с просмотра [Передача информации методу или конструктору] (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'? У меня также есть компиляция ошибок с остальной частью моего кода (еще семь методов), в которых используется переменная 'n', которую я не могу исправить. Есть ли способ передать «firstArg» в мой «public static int n»? – choblet

+0

У вас была правильная идея, когда у вас была 'public Chessboard (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 статичной, вы можете просто сделать это в основном методе.

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

Если вы n переменную экземпляр вместо того, чтобы это быть статическим, то ответ, что Дэвид Уоллес дал укажет вам в правильном направлении.

+0

Для этого OP также должен будет удалить параметр из подписи конструктора «Шахматной доски». –

+0

Я думал об этом, но его главный метод уже создает «Шахматную доску» без каких-либо параметров. Я предположил, что у него есть конструктор по умолчанию и просто не добавил его сюда. Тем не менее, вы на 100% прав. –

+0

О, я просто предположил, что у ОП был опубликован код, который не компилировался, а не пропускал некоторые из них. –