Java 项目的if语句和循环

Java 项目的if语句和循环,java,project,Java,Project,好的,我已经建立了这个程序,它读取成绩的文本文件并显示前两名学生。我应该在成绩上表现出任何联系,这是我努力的结果。但是,如果文本文件中没有平局,它将显示重复的第二高分。我似乎无法让它工作,所以如果没有关系,它会显示两个最高等级,如果有关系,它会显示两个关系。我真的需要帮助。我已经为此奋斗了好几个小时,我必须在今晚睡觉前提交这份报告。请有人帮我修改这个代码,这是一个非常大的分数,我想不出来 package lab06; import java.util.*; import java.io.*;

好的,我已经建立了这个程序,它读取成绩的文本文件并显示前两名学生。我应该在成绩上表现出任何联系,这是我努力的结果。但是,如果文本文件中没有平局,它将显示重复的第二高分。我似乎无法让它工作,所以如果没有关系,它会显示两个最高等级,如果有关系,它会显示两个关系。我真的需要帮助。我已经为此奋斗了好几个小时,我必须在今晚睡觉前提交这份报告。请有人帮我修改这个代码,这是一个非常大的分数,我想不出来

package lab06;

import java.util.*;
import java.io.*;
public class Lab06 {


public static void main(String[] args) throws Exception {
    Scanner lab06txt = new Scanner(new File("Lab06.txt")); //declare scanner for lab06.txt        
    //declare variables
    int grade = 0;
    int grade2 = 0;
    int record = 0;       
    int Highest = 0;
    int Highest2 = 0;
    int ACounter = 0;
    int BCounter = 0;
    int CCounter = 0;
    int DCounter = 0;
    int FCounter = 0;
    double average = 0;
    String lastName = "";
    String lastNameHigh = "";
    String lastNameHigh2 = "";
    String firstName = "";
    String firstNameHigh = "";
    String firstNameHigh2 = "";

    //while loop for lab06txt
    while (lab06txt.hasNext()){
        record ++; //keep track of number of records
        lastName = lab06txt.next(); //next string is placed into lastName
        firstName = lab06txt.next(); //next string is placed into firstName
        grade = lab06txt.nextInt(); //next integer is placed into grade
        {
            average += grade; //accumulate variable grade into variable average
            if (grade >= Highest) //if statement for determining highest grade 
            {
                Highest = grade;
                firstNameHigh = firstName; //places firstName of highest grade record into firstNameHigh
                lastNameHigh = lastName; //places lastName of highest grade record into lastNameHigh
            }                                       
        }

        {
        if ((grade >= 90) && (grade <= 100)) //if statements for variable grade
        {
           ACounter++;       //increases Acounter by 1
        }
        if ((grade >= 80) && (grade <= 89))
        {
           BCounter++;         //increases Bcounter by 1
        }
        if ((grade >= 70) && (grade <= 79))
        {
           CCounter++;         //increases Ccounter by 1
        }
        if ((grade >= 60) && (grade <= 69))
        {
           DCounter++;         //increases Dcounter by 1
        }
        if ((grade < 60))
        {
           FCounter++;         //increases Fcounter by 1
        }
        if ((grade < 0) || (grade > 100)) 
        {
            //if an incorrect error is found in the loop display the faulty record and end the program
            System.out.print("Score is out of bounds in record " + record + ": " + lastName + " "+ firstName + " " + grade + ".\nProgram ending\n"); 
            return;

        }
       }
    }
    Scanner SecondHighest = new Scanner(new File("Lab06.txt")); //new scanner for second highest grade
    while(SecondHighest.hasNext()) 
    {
        lastName = SecondHighest.next(); 
        firstName = SecondHighest.next();
        grade2 = SecondHighest.nextInt();           
        if(grade2 > Highest2 && grade2 < Highest) //if statement to determine second highest grade
        {
                Highest2 = grade2;
                firstNameHigh2 = firstName;
                lastNameHigh2 = lastName; 
        }
        if (Highest == grade2){
            Highest2 = grade2;
            firstNameHigh2 = firstName;
            lastNameHigh2 = lastName;
        }
    }

    System.out.println("Total students in class:        " +record); //display total students in class
    System.out.printf("Class average:                 %.1f\n", average/record); //display class average
    System.out.println("Grade Counters: "); 
    System.out.println("A's     B's     C's     D's     F's");
    System.out.printf(ACounter + "%7d %7d %8d %7d\n", BCounter,CCounter,DCounter,FCounter); //display number of A's B's C's D's and F's
    System.out.print("\n");
    System.out.println("Top Two Students: \n"); 

    System.out.printf(lastNameHigh + " " + firstNameHigh + "%15d \n", Highest); //display highest score and student
    System.out.printf(lastNameHigh2 + " " + firstNameHigh2 + "%15d\n", Highest2); //display second highest score and student


}

尽管需要对代码进行大量的清理,但这个块似乎…很奇怪

while(SecondHighest.hasNext())
{
lastName=SecondHighest.next();
firstName=SecondHighest.next();
等级2=第二高的.nextInt();
if(grade2>Highest2&&grade2
特别是第二条if语句:“如果highest等于grade2,那么我们用grade2覆盖highest2,用firstName覆盖firstNameHigh2,用lastName覆盖lastNameHigh2。”

我们为什么需要这个?我们在上面的声明中做同样的工作。删除它

现在您只剩下以下内容:

while(SecondHighest.hasNext())  {
    lastName = SecondHighest.next(); 
    firstName = SecondHighest.next();
    grade2 = SecondHighest.nextInt();           
    if(grade2 > Highest2 && grade2 < Highest) {
        Highest2 = grade2;
        firstNameHigh2 = firstName;
        lastNameHigh2 = lastName; 
    }
}
while(SecondHighest.hasNext()){
lastName=SecondHighest.next();
firstName=SecondHighest.next();
等级2=第二高的.nextInt();
如果(2级>最高2级和2级<最高){
最高2级=2级;
firstNameHigh2=firstName;
lastNameHigh2=lastName;
}
}
这似乎奏效了——我把杰克逊·尼古拉斯和克莱恩·哈里作为你们的两个最优秀的学生。但它是否涵盖了同等分数的情况

为了测试这个案例,我在你的名单上加入了另一个学生:鸣人Uzumaki,得分97。这将确保排名最高的两位是克莱恩·哈利和鸣人·乌祖木木

我再次运行它,我得到鸣人Uzumaki和杰克逊尼古拉斯作为我的前两名学生。那不可能——有两个学生的成绩是平局的

我需要在if语句中添加一个等价性检查-2级应大于或等于最高2级,2级应小于或等于最高2级,以确定第二高分

现在,有趣的部分是阻止一个名字挤压另一个名字。我将此作为练习留给读者,但可以肯定的是,根据您的数据布局方式,我读到的名字不能与我读到的高分名字相同,或者是同一个人

现在,如果有一种方法可以看出两个字符串是否相等


当然,这样做会让你的代码对两个名为“Jon”的用户变得脆弱(我和他们中的三个一起工作,所以这会失败),但也许应该改为姓氏。想一想——这对读者来说是一个练习。

如果是一个分数,而你却不知道,那么你就不应该因为知道了而得到好的分数,是吗?^但我想知道,我想知道到底出了什么问题。这一整天都让我发疯。即使不是为了分数,这也会困扰我,我已经花了很长时间试图修复它,但没有结果。这就是我来这里的原因。那个静电块在那里干什么?你知道吗,在你分配
等级之后的那一个
?老实说,我不太清楚为什么我会把它放在那里。我想这没什么用。我已经照你说的做了,但这仍然给我留下了一个问题:当没有领带时,扫描仪会读取文本文件,第二高的分数会被复制,我会得到两次显示的最高分数。我尝试通过执行以下操作来检查姓氏的两个字符串是否相等来更改此设置。
while(SecondHighest.hasNext()){if(!lastnamehight.equals(lastNameHigh2)){tie=false;}lastName=SecondHighest.next();firstName=SecondHighest.next();grade2=SecondHighest.nextInt();if(grade2>Highest2&&grade2
@MakotoI多亏了你Makoto才真正弄明白了这一点。“现在要是有办法看看两个字符串是否相等就好了。”我非常感谢你给我答案并让我思考。我为二年级做了两个if语句。一个大于或等于最高位2,另一个大于。但是在我写的if语句中,
&&!lastName.equalsIgnoreCase(lastnamehight))
while(SecondHighest.hasNext()) 
    {
        lastName = SecondHighest.next(); 
        firstName = SecondHighest.next();
        grade2 = SecondHighest.nextInt();           
        if(grade2 > Highest2 && grade2 < Highest) //if statement to determine second highest grade
        {
                Highest2 = grade2;
                firstNameHigh2 = firstName;
                lastNameHigh2 = lastName; 
        }
        if (Highest == grade2){
            Highest2 = grade2;
            firstNameHigh2 = firstName;
            lastNameHigh2 = lastName;
        }
    }
while(SecondHighest.hasNext())  {
    lastName = SecondHighest.next(); 
    firstName = SecondHighest.next();
    grade2 = SecondHighest.nextInt();           
    if(grade2 > Highest2 && grade2 < Highest) {
        Highest2 = grade2;
        firstNameHigh2 = firstName;
        lastNameHigh2 = lastName; 
    }
}