2013-07-11 141 views
0

我正在嘗試從用戶輸入的數字構建一個數組。我已經能夠計算一切,但最小和最大。下面的代碼總是以用戶輸入的第一個數字作爲最小值和最大值。關於如何解決任何建議,將不勝感激:for循環從數組中獲取最小值和最大值

Scanner in=new Scanner (System.in); 
     int num[]=new int[5]; 
     int average=0; 
     int i=0; 
     int sum=0; 

     for (i=0;i<num.length;i++) { 
      System.out.println("enter a number"); 
      num[i]=in.nextInt(); 
      sum=sum+num[i]; 
      int min=num[0]; 
      int max=num[0]; 
      if (num[i]<min) { 
      min=num[i]; 
      } 
      if (num[i]<max) { 
      max=num[i]; 
     } 

     average=sum/6; 
     System.out.println("Average="+ average); 
     System.out.println("Min="+ min); 
     System.out.println("Max="+ max); 
     System.out.println("Sum="+ sum); 
+0

「如果(NUM [I] max){max = num [i];}」??? – mmirwaldt

+1

這段代碼甚至沒有編譯爲'min'和'max'在循環內聲明並在其外部使用。 –

+0

爲什麼不把所有的信息輸入到數組中,然後對其進行分類?你的數組的末尾將是你的最小和最大。 –

回答

2

你的代碼是錯誤的。這是一個有點好轉之一:

Scanner in=new Scanner (System.in); 
double num[]=new double[5]; 
double average=0; 
int i=0; 
double sum=0; 

double min = Double.MAX_VALUE; 
double max = Double.MIN_VALUE; 

for (i=0;i<num.length;i++) { 
    System.out.println("enter a number"); 
    num[i]=in.nextDouble(); 
    sum=sum+num[i]; 
    if (num[i]<min) { 
     min=num[i]; 
    } else if (num[i] > max) { 
     max=num[i]; 
    } 
} 

average=sum/num.length; 
System.out.println(String.format("Average=%.3d", average)); 
System.out.println(String.format("Min=%.3d", min)); 
System.out.println(String.format("Max=%.3d", max)); 
System.out.println(String.format("Sum=%.3d", sum)); 

而且,我換成整數與雙打,因爲你希望:)

+0

當計算'average'(也應該是'double')時,'sum'應該加倍或乘以'1.0'。另外,當打印'double'變量時,最好使用'String#format'和'%.3d'來獲得有意義的輸出。 –

+0

「計算'average'時,'sum'應該加倍或乘以'1.0'」 - 嗯?我把它轉換成'double'('(double)sum'),它應該是足夠的:) – m4tx

+0

無論如何,你還沒有addresed它也沒有修復它後意見= \ –

3
 int min=num[0]; 
     int max=num[0]; 

移動最小值和最大值出來的。

int min = Integer.MAX_VALUE, 
     max = Integer.MIN_VALUE; 

如果塊的最小值和最大值應該相反。

而且平均應該被計算爲:

average = sum/num.length; 

謹防均線被截斷由於整數

0
int min,max;min=max=min[0]; 
     for (i=0;i<num.length;i++) { 
       System.out.println("enter a number"); 
       num[i]=in.nextInt(); 
       sum=sum+num[i]; 
       if (num[i]<min) { 
       min=num[i]; 
       } 
       if (num[i]<max) { 
       max=num[i]; 
      } 
從這個

除此之外還有很多其他的問題,在你的代碼

1.移動最小和最大外環

2.使用Double/Float來存儲平均值,因爲使用int會導致結果的截斷。這裏

1

錯誤的住宿是:

int min=num[0]; 
int max=num[0]; 

此代碼必須是外循環爲{}。

+0

你應該用一個較大的值初始化'min',用'low'初始化'max'。 –

2

聲明min和max超出循環的範圍。

int min =Integer.MAX_VALUE; 
int max= Integer.MIN_VALUE; 
double average = 0D; 
     for(..){ 

     if (num[i] > max) { // this is the condition you have to put 
     max=num[i]; 
     } 
    } 

    average= ((double)sum/num.length); 
    System.out.printf("Average is %.2f \n",average);//to print with 2 decimals 
+0

這甚至不接近答案。順便說一句,如果'min'的值比用戶輸入值低,它永遠不會改變。 –

+0

@LuiggiMendoza?爲什麼?xD – nachokk

+0

請參閱[什麼是可接受的答案?](http://meta.stackexchange.com/a/118694/182862)第10節。此外,它與[本答案](http:// stackoverflow.com/a/17598719/1065197)(但看起來像upvoters甚至沒有在投票前測試代碼)。 –

0

您應該在循環之前聲明最小和最大變量。如果你在第一個循環(i = 0),你可以分配它。否則,你比較一下。事情是這樣的:

Scanner in=new Scanner (System.in); 
    int num[]=new int[5]; 
    int average=0; 
    int i=0; 
    int sum=0; 
    int min; 
    int max; 

    for (i=0;i<num.length;i++) { 
     System.out.println("enter a number"); 
     num[i]=in.nextInt(); 
     sum=sum+num[i]; 
     if(i==0) { 
      min=num[0]; 
      max=num[0]; 
     } else { 
      if (num[i]<min) { 
       min=num[i]; 
      } 
      if (num[i]<max) { 
       max=num[i]; 
      } 
     } 
    } 

    average=sum/6; 
    System.out.println("Average="+ average); 
    System.out.println("Min="+ min); 
    System.out.println("Max="+ max); 
    System.out.println("Sum="+ sum); 
0

您可以使用排序。

List<Integer> foo = Arrays.asList(5, 6, 7); 
Collections.sort(foo); 
System.out.println("max=" + foo.get(foo.size()-1)); 
System.out.println("min=" + foo.get(0)); 

如果包括一些Apache庫時,可以使用他們的東西,如:

System.out.println(NumberUtils.max(new int[]{5,6,7})); 
相關問題