这就是我的问题。我需要帮助,试图找出我做错了什么,并从那里开始。我需要创建一个运行这些指令的程序。
创建名为Fraction的java类。该类用于表示两个整数的比率。包括允许用户设置分子和分母的突变体方法。还包括在屏幕上显示分数作为配给(例如5/9)的方法。此方法不需要将分数降低到最低项。
分数类应包含以下内容:
•用于存储分子、分母和比值的私有实例变量。
•设置所有实例变量的构造函数。
•获取和设置实例变量的公共方法。
•一个名为reduce()的公共方法,返回分数的最低项。
一个名为toString()的公共方法,它返回一个包含分数作为比率的String。
•一个私有方法名gcd(),返回两个整数的最大公约数。
创建一个测试程序,允许用户创建7个分数的数组。然后程序将按升序对分数进行排序。最高和最低的分数被扔掉,剩下的分数被加在一起。程序应显示所有分数及其总和。总和应减少到最低值,并显示在屏幕上。例如,如果总和为20/60,程序应显示1/3。
在测试程序中编写排序方法,对分数数组进行排序并计算总和。
假设您有以下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
我完全不知道该如何解决这个问题,我陷入了困境。下面是一份我的课程和作业。主文件。我尝试了一些不同的东西,并用“//”进行了注释,因此很抱歉提前输入了很长的代码。我一次又一次地想弄明白这一点,但已经被困了好几天。它一直给我一个奇怪的错误,叫做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[i] = new Fraction(i, i);
// fr[i].getNumerator(keyb.nextInt());
// fr[i].denominator(keyb.nextInt());
System.out.print(fr[i] + " "); }}
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;
}}
准备一个长答案。首先,在编写任何代码之前,最好先计划好一个项目,因此我们将采取以下步骤:1)从用户处读取输入,并将该输入存储到一个分数数组中。2) 对这个
分数
数组进行排序,然后删除(忽略)数组中的最高值和最低值。3) 对数组中除最高值和最低值之外的所有值求和,减少此和,然后将此和打印到屏幕上。
你在正确的轨道上,但你没有正确阅读用户输入。首先,出于某种原因打开一个文件。这是不必要的,因为您只需要从命令行读取。其次,您没有正确读取或存储输入。我建议反复提示用户输入分子,然后输入分母。每次读取一个分子和一个分母时,在提示用户输入之前,将这些值存储为分数。请参阅以下代码块以理解我的意思:
Fraction[7] fractions = new Fraction[7]; // array that will hold our fractions
Scanner inputScanner = new Scanner(System.in); // scanner that takes input from the command line
...
public void readInput()
{
int tempNumer; // variable to store numerator on each iteration
int tempDenom; // variable to store denominator on each iteration
for (int i = 0; i < fractions.length; i++)
{
System.out.println("Enter a numerator:");
tempNumer = inputScanner.nexInt(); // store the user-inputted numerator
System.out.println("Enter a denominator");
tempDenom = inputScanner.nextInt(); // store the user-inputted denominator
fractions[i] = new Fraction(tempNumer, tempDenom); // store a Fraction from our temp variables into our fractions array
}
return;
}
完成此方法后,
分数
数组将按照用户输入的顺序充满分数
对象。
那么,在普通数学中,我们怎么知道一个分数比另一个分数大呢?我们把两个分数转换成gcd作为每个分数的分母,然后我们比较分子(顺便说一句,你的gcd方法是错误的。gcd在两个分数的分母之间,而不是一个分数的分子和分母)。此时分子越大,分数越大。因此,最简单的方法是使用一个名为
fracCompare
的方法,它接受两个分数,将它们转换,然后返回哪个分数更大。我们可以这样做:
public int fracCompare(Fraction fracOne, Fraction fracTwo)
{
// First, find the gcd of the fractions
int gcd = gcd(fracOne.getDenominator, fracTwo.getDenominator);
// Now, we need to convert the numerator accordingly
// We will do this by finding the factor by which the denominator is
// increased and multiply the numerator by this factor
int factorOne = gcd / fracOne.getDenominator();
int tempFracOneNum = fracOne.getNumerator() * factorOne;
int factorTwo = gcd / fracTwo.getDenominator();
int tempFracTwoNum = fracTwo.getNumerator() * factorTwo;
// Now we compare these numerators
// We will return 1 if fracOne is greater than fracTwo
// We will return 2 if fracTwo is greater than fracOne
// We will return 0 if they are the same
if (tempFracOneNum > tempFracTwoNum)
return 1;
else if (tempFracTwoNum > tempFracOneNum)
return 2;
else
return 0;
}
public int gcd(int firstNum, int secondNum)
{
int a = firstNum.getDenominator();
int b = secondNum.getDenominator();
while(a != 0 && b != 0) // until either one of them is 0
{
int c = b;
b = a % b;
a = c;
}
return a+b; // either one is 0, so return the non-zero value
}
注意:我公然从用户那里窃取了这个gcd方法,这是拉希尔在另一篇帖子上的回答。现在我们有了比较方法,可以对数组进行排序了。我将把排序留给您,因为我已经厌倦了格式化代码,但下面是一些冒泡排序伪代码,让您开始:
i = 0
loop until i = fractions.length - 1
j = i
loop until j = fractions.length - 1
if fraction at j > fraction at j+1
swap fraction at j and fraction at j+1
最后一步。为了添加分数,我们再次需要使用gcd。我们用这个gdc来看看如何增加两个加法分数的分子。然后我们将取这个和,并将其添加到数组中的所有其他值中。最后,我们将减少大笔金额。
int tempGcd;
int tempFactorOne;
int tempFactorTwo;
Fraction sum = fractions[1];
for (int i = 2; i < fractions.length - 2; i++) // we loop from 2 to fractions.length-2 because
// we ignore the least and greatest values in the array
// and we assigned the initial sum to the first fraction
{
tempGcd = gcd(sum.getDenominator(), fractions[i].getDenominator());
tempFactorOne = tempGcd / sum.getDenominator();
tempFactorTwo = tempGcd / fractions[i].getDenominator();
sum.setNumerator(tempFactorOne * sum.getNumerator() + tempFactorTwo * fractions[i].getNumerator()); // add the numerators and store as the sum
sum.setDenominator(gcd); // obviously the denominator is the gcd
}
希望这一切都能奏效。我厌倦了打字,所以我将把分数的减少留给你。这很简单——你只需要找到分子和分母的最大公约数,然后用那个除数除掉它们。对不起,如果我的确切代码不能编译,我懒得自己做,你也不应该剽窃学校的项目。
这是我的问题,我需要创建一个运行以下指令的程序。 创建名为Fraction的java类。此类用于表示两个整数的比率。包括允许用户设置分子和分母的mutator方法。还包括一种在屏幕上以定量显示分数的方法(例如5/9)。这种方法不需要将分数减少到最低项。 分数类应包含以下内容: 用于存储分子、分母和ratio\u值的私有实例变量 创建一个测试程序,允许用户创建7个分数的数组。然后程序将按升序对分数进
问题内容: 我有2个表格-包含课程ID和课程名称的课程以及包含每个课程标签的tagCourse。 我想编写一个函数,该函数按给定的标签数组搜索课程,并按匹配标签的数量将其返回。但是我不知道如何正确,有效地编写它。请帮我。 IE。 问题答案: CREATE OR REPLACE FUNCTION search_by_tags(tags varchar[]) RETURNS TABLE (id_cou
我有一个数组的值。我用一个条件对它进行排序,以保持某些项目在顶部。到目前为止,这是有效的。现在我想运行两个条件,例如,我有两个前缀要与数组中的每个项相匹配:tableprefix和第二个daryprefix。我已经实现的是将tableprefix保持在顶部。其余的项目必须按字母顺序排序。 我想要达到的目标: 1:数组项匹配表前缀在最顶部//已经实现 2:与secondaryprefix匹配的数组项
我在Java中有一个数组,其中包含一组随机日期: {2015年1月20日、2015年2月12日、2015年2月20日、2015年6月21日、2015年7月12日、2015年7月28日、2015年7月30日、2015年9月24日、2015年12月31日} 如何按月将此阵列拆分为多个阵列? 我想要 {2015年1月20日}、{2015年2月12日、2015年2月20日}、{2015年6月21日}、{2
假设我有两个NumPy数组 我希望根据中的值,将数组有效地拆分为子数组。 我想要的输出是 假设以零开始并按升序排序,那么最有效的方法是什么? 注意:这个问题是这个问题的排序版本:根据另一个数组的值(未排序,而是分组)将NumPy数组拆分为子数组
我没有找到任何解决方案,如何简单地排序原始数组。 我尝试了更多的解决方案,但都不起作用。我在这里也找到了一些解决方案,但没有一个解决方案可以同时使用更多的数组,最多使用2。 如果我只使用以下内容: 然后它只对arr3中的项进行排序,但其他数组中的其他项不适合。 出于某种原因,返回类型需要int而不是double。