2016-02-23 7 views
-2

Кажется, что я что-то испортил, когда я запускаю код, который он выдает из строя в моем первом операторе if, при этом вывод «должен иметь 2 cmd строки args».Как сделать так, чтобы он принимал как аргументы командной строки

Im пытается выяснить, где я запутался, и, к сожалению, я нахожусь на рабочем столе, который не позволит мне использовать netbeans или eclipse, чтобы попытаться исправить эту проблему. в основном, я хочу, чтобы он принимал оба аргумента командной строки, когда я ввожу их после получения моего запроса о том, какие значения будут иметь значения X и Y.

Вот мой код:

import java.util.*; 
public class GenerationX { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println(" What numbers would you like to enter? Remember you need an 'X' and a 'Y' input: "); 
     int i; 
     int num = 0; 
     String str = " "; 
     int j = input.nextInt(); 
     int k = input.nextInt(); 

     if(args.length < 2) { //exits if less than two args entered 
      System.out.println("must have two cmd line args"); 
      System.exit(0); 
     } else { 
      Random random = new Random(); 
      int repeat = validateArg(args[0]); 
      int range = validateArg(args[1]); 
      for(int count = 0; count < repeat; count++) { 
       System.out.printf("%s ", random.nextInt(range)); 
      //Process each character of the string; 
       while(j < str.length() && k < str.length()) { 
        num *= 10; 
        num += str.charAt(j++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++). 
        num += str.charAt(k++) - '0'; 
       } 
       System.out.println(); 
      } 
     } 
    } 
    static int validateArg(String arg) { 
     int result = 0; 

     try { //tries to parse first arg into variable 
      result = Integer.parseInt(arg); 
     } 
     catch (NumberFormatException e) { 
      System.out.println("arg bad. Prog exiting."); 
      System.exit(0); 
     } 

     if(result <= 0) { 
      System.out.println("arg must be positive"); 
      System.exit(0); 
     } 
     return result; 
    } 
} 

Я не уверен, если я нужен метод INT K для входа сканера, но это была моя неудачная попытка получить код, чтобы принять как арг для того, чтобы обойти first if, также я хочу оставить это, чтобы добавить к нему корректирующие действия.

+0

командной строки приходят от того, как вы запустите приложение. Например: 'java GenerationX arg1 arg2' Как вы выполняете приложение? –

+0

К сожалению, мне приходится использовать онлайн-компилятор browxy и не иметь доступа к использованию моей командной строки на работе, но в вашем случае я понимаю, что вы говорите. Я хотел бы предложить пользователю ввести два аргумента, а затем запустить код. – 3monkeys1gorilla

ответ

1

Edited

Вам нужно создать новый массив и добавить J и K в массиве, как это:

Integer[] array = {null, null}; 
array[0] = j; 
array[1] = k; 

Тогда ваш, если заявление следует проверить, чтобы увидеть, если либо значение равно нулю, как это:

if (array[0] == null || array[1] == null){ 
    //insert code to do stuff here 
} 

args на самом деле массив сделал из того, что вводится в командной строке, когда программа сначала запускается. Таким образом, для добавления значений в аргументах, пользователь должен открыть командную строку и выполнить

java [ClassName] [arg0] [arg1] ...

+0

Im пытается сделать то, что вы предложили, и создал новый массив, и добавил его после моего первоначального строкового метода и переписал свой первый оператор if тому, что вы предложили но я тогда получаю ошибку, не могу найти символы переменные j и k и несравнимые типы int и null, поэтому я предполагаю, что я принял ваш совет и внедрил его неправильно – 3monkeys1gorilla

+0

Хорошо, я вижу проблему. Я на самом деле немного не работает. Вы хотите использовать объекты Integer вместо примитивных int. Я редактирую свой ответ, чтобы отразить это. Также вы хотели бы создать массив и добавить его после строки: 'int k = input.nextInt();' –

+0

Итак, так прошло через весь вопрос, благодаря вашему вводу, поэтому я представил его в качестве ответа, но теперь, когда я запускаю программу, она работает, затем я вводим 2 случайных значения, например 24 15, и получаю «Исключение в потоке» main «java.lang.ArrayIndexOutOfBoundsException: 0 \t в GenerationX.main (GenerationX.java:21) "error – 3monkeys1gorilla

0

Так я понял это с помощью @ Ионы Хейни и еще несколько часов, глядя на него, прежде чем Java гуру указал, что мне просто нужно изменить слово.

Heres рабочий код:

аргументов
import java.util.*; 
public class RandomXY { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println(" What numbers would you like to enter? Remember you need an 'X' and a 'Y' input: "); 
     int num = 0; 
     String str = " "; 
     int i = input.nextInt(); 
     int j = input.nextInt(); 
     Integer[] array = {null, null}; 
     array[0] = i; 
     array[1] = j; 

     if(array[0] == null || array[1] == null) { //exits if less than two args entered 
      System.out.println("must have 2 command line arguments"); 
      System.exit(0); 
     } else { 
      Random random = new Random(); 
      int repeat = validateArg(array[0]); 
      int range = validateArg(array[1]); 
      for(int count = 0; count < repeat; count++) { 
       System.out.printf("%s ", random.nextInt(range)); 
      //Process each character of the string; 
       while(i < str.length() && j < str.length()) { 
        num *= 10; 
        num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++). 
        num += str.charAt(j++) - '0'; 
       } 
       System.out.println(); 
      } 
     } 
    } 
    private static int validateArg(Integer arg) { 
     if(arg <= 0) { 
      System.out.println("arguments must be positive"); 
      System.exit(0); 
     } 
     return arg; 
    } 
}