Почему этот parseInt выбрасывает массив из связанного исключения? - PullRequest
0 голосов
/ 29 августа 2018

Я пытался найти GCD с двумя аргументами, но в строке 36 он выдает ArrayOutOfBoundsException

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 0 в Hcdno.main (Gcdno.java:36)

public class Gcdno {         
    static int gcd(int a,int b)
    {
        if(a==b)
            return a;
        if(a==0 || b==0)
            return 0;
        if(a>b)
            return hcd(a-b,b);
        return hcd(a,b-a);            
    }
    public static void main(String[] args) {
        int m=Integer.parseInt(args[0]);
        int o=Integer.parseInt(args[1]);
        int x= gcd(m,o);
        System.out.println(x); 
    }      
}

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Вы получили ошибку. Вы не получили значение аргумента args метода.

Вы можете запустить приложение в формате ниже

Предположим, что путь к файлу скомпилированного класса Gcdno: "/home/himly/Gcdno.class"

Выполнить следующие команды

cd  /home/himly
java Gcdno 8 7
0 голосов
/ 29 августа 2018

Для вас есть два варианта:

Если вы используете IDE для выполнения задач построения / запуска, вам лучше использовать второй вариант.

# 1. при запуске программы заключать цифры

В этом случае вам нужно перейти в каталог, содержащий программу Java, и запустить:

javac Gcdno.java 
java Gcdno 3 5 

# 2. используйте Scanner для получения ввода от пользователей

В вашем случае вы можете попробовать:

Scanner scanner = new Scanner(System.in);
int m=scanner.nextInt();
int o=scanner.nextInt();

Кстати, у вашего gcd метода есть некоторые опечатки. Я исправил это как:

static int gcd(int a, int b) {
    if (a == b) return a;
    if (a == 0 || b == 0) return 0;
    if (a > b) return gcd(a - b, b); // not hcd;
    return gcd(a, b - a); // not hcd;
}
0 голосов
/ 29 августа 2018

Вы получаете сообщение об ошибке, поскольку String[] args пусто.

Когда вы запускаете программу Java с помощью командной строки и хотите передать аргументы, тогда используется String[] args. Я думаю, что вы не запускаете Java-программу из командной строки или, если это так, вы не передаете аргументы, и, таким образом, вы получаете указанную ошибку, так как массив String[] args пуст. Поскольку вы хотите получить значения m и o, вы можете использовать следующее:

Scanner scan = new Scanner(System.in);
int m= scan.nextInt();
int o = scan.nextInt();

Теперь, когда вы запустите вашу Java-программу, она будет ждать ввода от вас и после этого выполнится.

...