java - 由于 main 中的 ArrayIndexOutOfBoundsException 导致编译错误

标签 java

大家好,希望一切都好。我正在完成为作业编写的程序,并且在线程“main”java.lang.ArrayIndexOutOfBoundsException:0中遇到了异常错误: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 个整数,前两个是第一个分子和第一个分母,最后两个是第二个分子和分母。

最佳答案

如果我正确理解您的前提,您希望允许输入两个分数作为命令行参数。例如,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];
        // ...
    }
}

关于java - 由于 main 中的 ArrayIndexOutOfBoundsException 导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55877983/

相关文章:

java - 使用 java 和正则表达式查找最后一次出现的位置

java - 如何修复错误 "Subject class type invalid."

Java 1.7 - CMS 在达到 CMSInitiatingOccupancyFraction 之前启动

java - JSF selectManyCheckboxes 不起作用

java - 在java中使用O(logn)复杂度比较两个数组列表

java - Java 11 上的 JFileChooser ,翻译成法语的问题

java - 如何使用 Java EE Eclipse 打开项目?

java - 列出未知枚举的值

java - 在 Joda Time 中创建一个没有年份的日期范围?

java - 在 Java 中实现通用接口(interface)