我想按降序对6个作业成绩的给定输入进行排序。现在,输入取自一个文件,它由以下格式的成绩组成例如: hw1 hw2 hw3 hw4 hw5 hw6学生1 50 30 40 10 30 0学生2 12 20 30 12 30 40学生3 12 50 60 10 20 30
我已经编写了适当的代码来接受输入,并将成绩保存在hw1
的变量中,该变量包含所有学生的所有hw1
成绩,以此类推,以备休息。
我还写了一个代码来对hw等级进行排序,但它有一些问题,据我所知,在排序代码之前,我的while
循环中存在问题,如果有任何帮助,我将不胜感激。
double t2,t1,q1,q2,hw1,hw2,hw3,hw4,hw5,hw6,Final;
String Last_Name,First_Name;
int HW_Count=0;
Scanner input=new Scanner(System.in);
Scanner inData=new Scanner(System.in);
File inFile=new File("grades1.txt");
boolean inFileFound = false;
try {
input=new Scanner(inFile);
inFileFound=true;
}
catch(FileNotFoundException fnf) {
System.out.println("File not found");
}
while(inFileFound&&input.hasNextLine()) {
Last_Name=input.next();
t1=input.nextDouble();
t2=input.nextDouble();
Final=input.nextDouble();
hw1=input.nextDouble();
hw2=input.nextDouble();
hw3=input.nextDouble();
hw4=input.nextDouble();
hw5=input.nextDouble();
hw6=input.nextDouble();
q1=input.nextDouble();
q2=input.nextDouble();
HW_Count=input.nextInt();
First_Name=input.nextLine();
double t1final=t1*10/100;
double t2final=t2*15/100;
double Finalfinal=Final*25/200;
double q1final=q1*1/10;
double q2final=q2*1/10;
double finalgrade=0;
double temp=0;
while((hw1<hw2)||(hw2<hw3)||(hw3<hw4)||(hw4<hw5)) {
if(hw1<hw2) {
temp=hw1;
hw1=hw2;
hw2=temp;
}
if(hw2<hw3) {
temp=hw2;
hw2=hw3;
hw3=temp;
}
if(hw3<hw4) {
temp=hw3;
hw3=hw4;
hw4=temp;
}
if(hw4<hw5) {
temp=hw4;
hw4=hw5;
hw5=temp;
}
if(hw5<hw6) {
temp=hw5;
hw5=hw6;
hw6=temp;
}
}
}
发布于 2017-04-19 09:08:46
我只发现了你的代码中的一个问题,尽管可能不是全部,因为它很难脱离上下文理解(我只会相信你的文件读取,因为我不知道文件是如何格式化的)。虽然我不喜欢使用Final作为一个变量(final是一个关键字),但它是有效的。我能清楚地看到的问题实际上是while循环。尽管在排序中确实考虑到了hw6,但它不是while循环的if的一部分。这意味着如果hw1=5,hw2=10,hw3=15,hw4=20,hw5=25,hw6=0;排序不会发生,它们仍然是无序的。另外,即使不使用数组,我也会创建一个while((hw1<hw2)||(hw2<hw3)||(hw3<hw4)||(hw4<hw5))|| (hw5<hw6))
方法来接收2个工作流,并交换它们,因为冗余代码是额外的和混乱的:
private void swap(double a, double b){
int temp= a;
a=b;
b=temp;
}
https://stackoverflow.com/questions/43484264
复制相似问题