簡體   English   中英

不使用數組按降序對整數排序

[英]Sorting integers in descending order without using arrays

我想按降序對給定的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於所有學生的所有hw1成績,依此類推,以此類推。

我還編寫了一個代碼來對硬件成績進行排序,但是有一些問題,只要我知道排序代碼之前的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;
            }
        }
    }

我發現您的代碼只有一個問題,盡管可能不是全部,原因是很難從上下文中理解(我只是信任您的文件讀取,因為我不知道文件的格式)。 盡管我不喜歡使用Final作為變量(final是關鍵字),但它可以工作。 我可以清楚地看到的問題實際上是while循環。 盡管您確實在某種程度上說明了hw6,但這並不是while循環if的一部分。 這意味着如果hw1 = 5,hw2 = 10,hw3 = 15,hw4 = 20,hw5 = 25,hw6 = 0; 排序不會發生,它們仍然會混亂。 使while循環while((hw1<hw2)||(hw2<hw3)||(hw3<hw4)||(hw4<hw5))|| (hw5<hw6)) while((hw1<hw2)||(hw2<hw3)||(hw3<hw4)||(hw4<hw5))|| (hw5<hw6))另外,即使不使用數組,我也將使用swap方法來接收2個hws並進行交換,因為冗余代碼是多余的且混亂的:

private void swap(double a, double b){
    int temp= a;
    a=b;
    b=temp;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM