有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

由于main中存在ArrayIndexOutOfBoundsException,导致java编译错误

大家好,我希望一切都好。我正在完成一个程序,我正在为一个作业编写程序,我遇到了一个Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0错误。我试图根据之前的教程工作排除故障,但运气不佳。过去我用相同的基本代码做过类似的小型项目,没有任何问题

public class ArithmeticWithFractions {

    private static String Num1;
    private static String Num2;
    private static String Denom1;
    private static String Denom2;

    public static void main(String[] args) {

        Num1 = args[0];
        Denom1 = args[1];
        Num2 = args[2];
        Denom2 = args[3];

        int NumeratorOne = Integer.parseInt(Num1);
        int NumeratorTwo = Integer.parseInt(Num2);

        int DenominatorOne = Integer.parseInt(Denom1);
        int DenominatorTwo = Integer.parseInt(Denom2);

        Fraction FirstFraction = new Fraction(NumeratorOne, DenominatorOne);
        Fraction SecondFraction = new Fraction(NumeratorTwo, DenominatorTwo);

        displayresults(FirstFraction, SecondFraction);

    }

    public static void displayresults(Fraction fr1, Fraction fr2) {

        System.out.println("java ArithmeticWithFractions");
        System.out.println("--- Basic operations with fractions ---");

        Fraction fr3 = fr1.Add(fr2);
        System.out.println("The sum: " + fr1 + "+" + fr2 + "=" + fr3);

        fr3 = fr1.Subtract(fr2);
        System.out.println("The difference: " + fr1 + "+" + fr2 + "=" + fr3);

        fr3 = fr1.Product(fr2);
        System.out.println("The product: " + fr1 + "+" + fr2 + "=" + fr3);

        fr3 = fr1.Quotient(fr2);
        System.out.println("The quotient: " + fr1 + "+" + fr2 + "=" + fr3);

    }
}

class Fraction {

    private int numerator;
    private int denominator;

    public Fraction() {

        numerator = 0;
        denominator = 1;

    }

    public Fraction(int numerator, int denominator) {

        this.numerator = numerator;
        this.denominator = denominator;

    }

    public Fraction Add(Fraction other) {

        int newNumerator = ((other.numerator * denominator)
                + (numerator * other.denominator));
        int newDenominator = denominator * other.denominator;
        Fraction NewFraction = new Fraction(newNumerator, newDenominator);
        return NewFraction;

    }

    public Fraction Subtract(Fraction other) {

        int newNumerator = ((other.numerator * denominator)
                - (numerator * other.denominator));
        int newDenominator = denominator * other.denominator;
        Fraction NewFraction = new Fraction(newNumerator, newDenominator);
        return NewFraction;

    }

    public Fraction Product(Fraction other) {

        int newNumerator = numerator * other.numerator;
        int newDenoinator = denominator * other.denominator;
        Fraction NewFraction = new Fraction(newNumerator, newDenoinator);
        return NewFraction;

    }

    public Fraction Quotient(Fraction other) {

        int newNumerator = numerator * other.denominator;
        int newDenominator = denominator * other.numerator;
        Fraction NewFraction = new Fraction(newNumerator, newDenominator);
        return NewFraction;

    }

    public String toString() {
        return this.numerator + "/" + this.denominator;
    }

    public int calcCommonDenominator(int numerator, int denominator) {
        if (numerator % denominator == 0) {
            return denominator;
        }
        return calcCommonDenominator(denominator, numerator % denominator);
    }

    void reduce() {
        int gcd = calcCommonDenominator(numerator, denominator);
        numerator /= gcd;
        denominator /= gcd;

    }
}

错误发生在第5行String Fraction = args[0];,如果编译成功,程序应该允许在一个命令行参数中输入4个整数,前两个是第一个分子和第一个分母,最后两个是第二个分子和分母


共 (2) 个答案

  1. # 1 楼答案

    java.lang.ArrayIndexOutOfBoundsException: 0在您的情况下,当您尝试在不提供输入参数(命令行参数)的情况下运行程序时,将发生

    因此,请尝试使用命令行参数运行程序。如下

          java ArithmeticWithFractions 1234
    

    建议:
    更改字符串分数=args[0]处变量“分数”的名称;对有意义的东西说输入

    String input = args[0];
    

    String Num1=输入。子串(0);字符串Num2=输入。子串(1);字符串Denom1=输入。子串(2);字符串Denom2=输入。子串(3)

    命令行参数应该类似于1234(没有空格)

  2. # 2 楼答案

    如果我正确理解您的前提,您希望允许输入两个分数作为命令行参数。例如,1/23/4将被输入为:

    1 2 3 4
    

    如果是这样,那么您可以简单地捕获这些组件:

    String Num1 = args[0];
    String Denom1 = args[1];
    String Num2 = args[2];
    String Denom2 = args[3];
    

    当前代码的第5行没有意义:

    String Fraction = args[0];
    

    Fraction对象与String没有直接关系。我们需要使用提供的构造函数创建Fraction的实例,但这需要两个整数

    编辑:

    下面是一个实现可能的样子:

    public class ArithmeticWithFractions {
        private String num1;
        private String num2;
        private String denom1;
        private String denom2;
    
        public static void main(String[] args) {
            num1 = args[0];
            denom1 = args[1];
            num2 = args[2];
            denom2 = args[3];
            // ...
        }
    }