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

Я пытаюсь выяснить, где я ошибаюсь, и, к сожалению, я нахожусь на рабочем столе, который не позволяет мне использовать 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 для ввода сканера, но это была моя неудачная попытка заставить код принимать оба аргумента, чтобы обойти первый оператор if, также я хочу оставить это, чтобы добавить корректирующие действия к этому.

-2
3monkeys1gorilla 23 Фев 2016 в 20:38

2 ответа

Лучший ответ

Отредактировано

Вам нужно создать новый массив и добавить к нему j и k следующим образом:

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

Затем ваш оператор if должен проверить, является ли какое-либо значение нулевым, например:

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

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

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

1
Jonah Haney 23 Фев 2016 в 18:32

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

Вот рабочий код:

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;
    }
}
0
3monkeys1gorilla 24 Фев 2016 в 05:20