由于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个整数,前两个是第一个分子和第一个分母,最后两个是第二个分子和分母
# 1 楼答案
java.lang.ArrayIndexOutOfBoundsException: 0
在您的情况下,当您尝试在不提供输入参数(命令行参数)的情况下运行程序时,将发生因此,请尝试使用命令行参数运行程序。如下
建议:
更改字符串分数=args[0]处变量“分数”的名称;对有意义的东西说输入
String Num1=输入。子串(0);字符串Num2=输入。子串(1);字符串Denom1=输入。子串(2);字符串Denom2=输入。子串(3)罢工>命令行参数应该类似于1234(没有空格)
# 2 楼答案
如果我正确理解您的前提,您希望允许输入两个分数作为命令行参数。例如,
1/2
和3/4
将被输入为:如果是这样,那么您可以简单地捕获这些组件:
当前代码的第5行没有意义:
Fraction
对象与String
没有直接关系。我们需要使用提供的构造函数创建Fraction
的实例,但这需要两个整数编辑:
下面是一个实现可能的样子: