2016-11-30 181 views
1

我需要從我的while循環接收的輸入中找到最小和最大的值。我不知道該怎麼做。 這是我有:如何查找循環中最小和最大的數字?

import java.text.NumberFormat; 
import java.io.*; 
import java.text.DecimalFormat; 
import java.util.Scanner; 

public class average { 
    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 
     int count = 0; 
     double ng = 0, total = 0, average; 
     int countt; 
     { 
     BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); 
     } 
     while (ng > -1) { 
      if (ng > -1) 
      System.out.print("Enter your next grade (-1 to quit) : "); 
      ng = keyboard.nextDouble(); 
      total = total + ng; 
      count++; 
     } 
     countt=count-1; 
     average = (total + 1)/countt; 
     System.out.println(" "); 
     System.out.println("Total number of students: " + countt); 
     System.out.println("Average of grades " + average); 
     System.out.println("Highest grade " +); 

    } 
} 
+0

你覺得你應該怎麼做?你有沒有想過擁有一個變量「maxValue」並存儲你在那裏找到的最大價值? – Acapulco

回答

0
 import java.text.NumberFormat; 
import java.io.*; 
import java.text.DecimalFormat; 
import java.util.Scanner; 

public class average { 
    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 
     int count = 0; 
     double ng = 0, total = 0, average; 
     int countt; 
     { 
     BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); 
     } 
int max = 0; 
     while (ng > -1) { 
      if (ng > -1) 
      System.out.print("Enter your next grade (-1 to quit) : "); 
      ng = keyboard.nextDouble(); 
      total = total + ng; 
      count++; 
      max = ng > max? ng : max; 
     } 
     countt=count-1; 
     average = (total + 1)/countt; 
     System.out.println(" "); 
     System.out.println("Total number of students: " + countt); 
     System.out.println("Average of grades " + average); 
     System.out.println("Highest grade " + max); 

    } 
} 
0

循環之外,初始化一個新的變量分鐘,Double.MAX_VALUE與Double.MIN_VALUE了新的變數最大。 在循環內部,如果ng大於max update max和ng。如果ng小於min,則用ng更新min。

2

您可以創建一個TreeSet,爲其添加每個數字,然後簡單地獲取第一個和最後一個條目 - 這些是TreeSet排序後的最小和最大條目。

Set<Double> set = new TreeSet<>(); 
在while循環

,加上雙:

set.add(ng); 

和while循環後,得到

Object[] sa = set.toArray(); 
System.out.println("min: " + sa[0]); 
System.out.println("max: " + sa[sa.length - 1]); 
0

這裏有一個簡單的方法,你可以做到這一點。請參閱評論以獲得解釋。

這個想法是添加兩個新的變量,一個爲最高等級,一個爲最低等級。每次從鍵盤輸入新值時,都會將輸入的值與當前的最高值和最低值進行比較。如果新值高於最高值(或低於最低值),則將新值指定爲新的最高/最低等級。

import java.text.NumberFormat; 
import java.io.*; 
import java.text.DecimalFormat; 
import java.util.Scanner; 

public class Average { 
    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 
     int count = 0; 
     double ng = 0, total = 0, average; 
     int countt; 

     // Add these variables 
     boolean firstRun = true; 
     double largest = 0; 
     double smallest = 0; 

     { 
      BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); 
     } 
     while (ng > -1) { 
      if (ng > -1) 
       System.out.print("Enter your next grade (-1 to quit) : "); 
      ng = keyboard.nextDouble(); 

      // Add this part for calculating largest and smallest 
      if (ng > -1) { 
       // When you run it the first time, assign this first value as the largest and 
       // smallest value, since it is the only value you've seen at the moment 
       if (firstRun) { 
        firstRun = false; 
        largest = ng; 
        smallest = ng; 
       } else { // If it's not the first run, then compare the values 
        // Check if the current value is bigger than your current max value 
        if (ng > largest) { 
         largest = ng; 
        } 

        // Check if the current value is smaller than your current min value 
        if (ng < smallest) { 
         smallest = ng; 
        } 
       } 
      } 

      total = total + ng; 
      count++; 
     } 
     countt=count-1; 
     average = (total + 1)/countt; 
     System.out.println(" "); 
     System.out.println("Total number of students: " + countt); 
     System.out.println("Average of grades " + average); 

     // Et voila! 
     System.out.println("Highest grade " + largest); 
     System.out.println("Lowest grade " + smallest); 

    } 
} 
0
import java.text.NumberFormat; 
import java.io.*; 
import java.text.DecimalFormat; 
import java.util.Scanner; 

public class average { 
    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 
     int count = 0; 
     double ng = 0, total = 0, average, smallest = -1, largest = -1; 
     int countt; 
     { 
     BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); 
     } 
     while (ng > -1) { 
      if (ng > -1) 
      System.out.print("Enter your next grade (-1 to quit) : "); 
      ng = keyboard.nextDouble(); 
      if (smallest == -1 || (ng != -1 && ng < smallest)) 
       smallest = ng; 
      if (ng > largest) 
       largest = ng; 
      total = total + ng; 
      count++; 
     } 
     countt=count-1; 
     average = (total + 1)/countt; 
     System.out.println(" "); 
     System.out.println("Total number of students: " + countt); 
     System.out.println("Average of grades " + average); 
     System.out.println("Highest grade " + ""); 
     System.out.println("largest: " + largest); 
     System.out.println("smallest: " + smallest); 

    } 
}