Ошибка в коде: исключение в потоке "main" java .lang.ArrayIndexOutOfBoundsException: 1 - PullRequest
0 голосов
/ 09 апреля 2020
  double t = Double.parseDouble(args[0]);

  int r = Integer.parseInt(args[0]);

  System.out.println("r = " + r + ", t = " + t);

Эта часть кода не компилируется. Я не могу найти, что не так.

Код ошибки:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Ошибка, указанная в заголовке вашего сообщения, противоречит ошибке, указанной в вашем фактическом сообщении. Ошибка в заголовке означает, что вы принимаете более одного аргумента, тогда как первый аргумент был успешным, но второго аргумента не было. Ошибка, указанная в вашем теле сообщения, означает, что аргумент не был предоставлен вообще. Что это?

На основании ошибки, указанной в вашем сообщении,

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

аргументы не обнаружены. Другими словами, args [] String Array ничего не содержит (0 элементов) ... при запуске из командной строки терминала не было передано никаких аргументов.

Чтобы защитить приложение от этой ситуации, вы можете сделать что-то вроде this:

public static void main(String args[]) {
    // Were arguments supplied? 
    if (args.length == 0) {
        // No... 
        System.out.println("Failure! - No Argument Supplied!");
        return;
    }
    /* Is the argument supplied a string representation of a signed 
       or unsigned Integer or double/float numerical value?      */
    else if (!args[0].matches("-?\\d+(\\.\\d+)?")) {
        // No...
        System.out.println("Failure! - Invalid Numerical Argument Supplied!");
        return;
    }

    double t = 0.0d;
    int r = 0;

    // Has a double or float value been supplied?
    if (args[0].contains(".")) {
        // Yup ... So let's convert to double.
        t = Double.parseDouble(args[0]);
    }
    else {   
        // Nope ... So let's convert to Integer (int).
        r = Integer.parseInt(args[0]);
    }

    // Display the result in Console Window.
    System.out.println("r = " + r + ", t = " + t);
}

Вам также необходимо принять к сведению, что вы не можете передать строковое представление значения с плавающей запятой в Integer.parseInt () метод. Это связано с тем, что точка (. ) считается буквенным символом (например, пробел или буква A), который метод Integer.parseInt () не примет. Если вы попробуете, NumberFormatException будет сброшено, и ваше приложение остановится из-за ошибки. Однако метод Integer.parseInt () будет принимать значение с префиксом - или + символа (ie: Integer.parseInt ("+ 50") . Мы также учли это в приведенном выше примере кода (см. Комментарии в коде).

0 голосов
/ 09 апреля 2020

В Java, args содержит предоставленные аргументы командной строки в виде массива объектов String.

Другими словами, если вы запустите свою программу как java DemoMain one two, тогда аргументы будут содержать ["one", "two"].

В вашем случае вы не передаете никаких аргументов, которые приводят к Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

Вы не передаете значение аргументов. Попробуйте передать значение через командную строку, которую вы.

import java.io.BufferedReader;

import java.io.IOException;
import java.util.Scanner;

public class DemoMain {

    public static void main(String[] args)  {

        System.out.println(args[0]);
        double t;
        t = Double.parseDouble(args[0]);

        double r;
         r = Double.parseDouble(args[0]);
    }

}

enter image description here

...