Member 13676546 Ответов: 2

Пожалуйста, объясните ответ


что отображается в коде во время его выполнения ?
пожалуйста, объясните, почему ответ таков :
10/8
17/12
3/2 
15/9 
 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 Fraction.main(Fraction.java:33)

вот эта программа:
public class Fraction {
 private int numerator;
 private int denominator; 

public Fraction(int n, int d) {
numerator = n; denominator = d;} 

public Fraction add(Fraction f) { 
return newFraction(numerator ∗ f.denominator + f.numerator ∗ denominator, denominator ∗ f.denominator);} 

public Fraction add(int x) {
 return newFraction(numerator + x ∗ denominator, denominator);} 

public Fraction add(int n, int d) {
 return newFraction(numerator ∗ d + n ∗ denominator, denominator ∗ d);} 

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

public static void main(String[] args) { 

Fraction f1 = newFraction(1, 2);
Fraction f2 = newFraction(2, 3); 
Fraction f3 = newFraction(3, 4);

Fraction[] sums = newFraction[4]; 
sums[0] = f1.add(f3); 
sums[1] = f2.add(f3); 
sums[2] = f1.add(1); 
sums[3] = f2.add(3, 3);

 for (int i = 0; i <= sums.length; i++) { 
System.out.println(sums[i].toString());
}
}
}


Что я уже пробовал:

......................................................................

2 Ответов

Рейтинг:
2

Peter_in_2780

Сообщение

Цитата:
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 4 Fraction.main(Fraction.java:33)
это говорит вам, что вы пытаетесь получить доступ за пределы массива. В частности, значение индекса 4 быть проблемой.
Линия
for (int i = 0; i <= sums.length; i++) { 
есть ошибка, но я оставлю вас обдумать ее.


Member 13676546

спасибо.
но массив инициализируется как 4 , Так почему же он дает это исключение

Peter_in_2780

Массив состоит из 4 элементов, да. Они пронумерованы 0, 1, ... Теперь ты это понимаешь.

Рейтинг:
1

Patrice T

Не ваш вопрос, но когда вы играете с дробями, это обычная практика, чтобы уменьшить дроби

10/8  => 5/4
17/12
3/2 
15/9 => 5/3

сокращение производится путем деления обоих чисел на их GCD.
-----
Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
Некоторые стили кодирования легче читать, чем другие, см. Ваш код:
public class Fraction {
	private int numerator;
	private int denominator;

	public Fraction(int n, int d) {
		numerator = n; denominator = d;
	}

	public Fraction add(Fraction f) {
		return newFraction(numerator ∗ f.denominator + f.numerator ∗ denominator, denominator ∗ f.denominator);
	}

	public Fraction add(int x) {
		return newFraction(numerator + x ∗ denominator, denominator);
	}

	public Fraction add(int n, int d) {
		return newFraction(numerator ∗ d + n ∗ denominator, denominator ∗ d);
	}

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

	public static void main(String[] args) {

		Fraction f1 = newFraction(1, 2);
		Fraction f2 = newFraction(2, 3);
		Fraction f3 = newFraction(3, 4);

		Fraction[] sums = newFraction[4];
		sums[0] = f1.add(f3);
		sums[1] = f2.add(f3);
		sums[2] = f1.add(1);
		sums[3] = f2.add(3, 3);

		for (int i = 0; i <= sums.length; i++) {
			System.out.println(sums[i].toString());
		}
	}
}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]


Member 13676546

спасибо