Создайте класс Java с именем Fraction. Этот класс используется для представления отношения двух целых чисел. Включите методы-мутаторы, которые позволяют пользователю устанавливать числитель и знаменатель. Также включите метод отображения дроби на экране в виде рациона (например, 5/9). Этот метод не требует сведения дроби к наименьшему значению.
Класс дроби должен содержать следующее:
- Частные переменные экземпляра для хранения числителя, знаменателя и значения отношения.
- Конструкторы, которые устанавливают все переменные экземпляра.
- Открытые методы для получения и установки переменных экземпляра.
- Открытый метод метод с именем сокращение(), который возвращает наименьшие члены дроби.
- Открытый метод с именем toString(), который возвращает строку, содержащую дробь в виде отношения.
- Закрытый метод с именем gcd(), который возвращает наибольший общий делитель двух целых чисел.
Напишите в тестовой программе метод сортировки, чтобы отсортировать массив дробей и вычислить сумму.
Предположим, у вас есть следующие 7 дробей: 6/7, 2/4, 3/4, 3/18, 1/8, 10/20, 2/6, а затем пример вывода после если отбросить самую низкую и самую большую дроби, получится:
3/18 + 2/6 + 2/4 + 10/20 + 3/4 = 9/4
Я совершенно не понимаю, как это решить, и застрял на том месте, где нахожусь. Ниже приведена копия моего класса и файла .main. У меня есть несколько разных вещей, которые я пробовал, закомментированных с помощью '//', поэтому заранее извините за длинные коды. Я снова и снова пытался это понять и застрял на несколько дней. Он продолжает выдавать мне эту странную ошибку под названием null.
Как мне заставить это работать?
import java.io.*;
import java.util.*;
public class Arrays_hw5 {
private static final Scanner keyb = null;
public static void main(String[] args) {
Fraction [] fr = new Fraction[7];
String reduce = "";
int numerator = 0, denominator = 0;
Scanner keyb = null;
FileInputStream fis = null;
//Scanner keyb = new Scanner(System.in);
try {
fis = new FileInputStream(new File("Fraction"));
keyb = new Scanner(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for (int i = 0; i < fr.length; i++) {
//System.out.println("Enter numerator then denominator, hit enter after each entry: ");
// fr = new Fraction(i, i);
// fr.getNumerator(keyb.nextInt());
// fr.denominator(keyb.nextInt());
System.out.print(fr + " ");
}
}
public static void selectionSort(int[]arr)
{
int smallest = 0;
for (int outer = 0; outer < arr.length - 1; outer++)
{
smallest = outer;
for(int inner = outer + 1; inner < arr.length; inner++)
{
if (arr[inner] < arr[smallest])
smallest = inner;
}
int v = arr[outer];
arr[outer] = arr[smallest];
arr[smallest] = v;
}
}
}
Вот класс дроби.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Fraction {
public int numerator = 1;
public int denominator = 1;
public int gcd;
public Fraction() {
super();
}
public Fraction(int n, int d) {
numerator = n;
denominator = d;
}
public int getNumerator() {
return numerator;
}
public void setNumerator(int numerator) {
this.numerator = numerator;
}
public int getDenominator() {
return denominator;
}
public void setDenominator(int denominator) {
this.denominator = denominator;
}
private static int gcd(int numerator, int denominator) {
return denominator == 0 ? numerator : gcd(denominator, numerator % denominator);
}
public double decimal(double numerator, double denominator) {
return numerator / denominator;
}
public static String reduce(int numerator, int denominator) {
int gcd = gcd(numerator, denominator);
return (numerator / gcd) + "/" + (denominator / gcd);
}
@Override
public String toString() {
return numerator + "/" + denominator;
}
}