public class max{
public static void main(String [] args){
double sum = 0;
Scanner input = new Scanner(System.in);
double x[] = new double[10];
double mean = 0;
double min =x[0];
double max =x[0];
System.out.println("Enter no more than 10 numbers");
for(int i = 1; i < x.length; i++)
{
x[i] = input.nextDouble();
if(x[i] <=0)
break;
if (x[i]< min)
min = x[i];
if(x[i] > max )
max = x[i];
sum = sum + x[i];
mean = sum / i;
}
System.out.println("Sum =" + Math.round(sum * 100.0) / 100.0);
System.out.println("mean =" +Math.round(mean * 100.0) / 100.0);
System.out.print("min =" + min);
System.out.print("max =" + max);
}
}
請仔細看你的程式碼
double x[] = new double[10];
double min =x[0];//這時候存的是0.0
你一開始這樣寫
for(int i = 1; i < x.length; i++)
你在跑for迴圈的時候從x[1]開始存
if(x[i] <=0)
break;
當你後面輸入值的時候,輸入小於等於0的數字就必須停下來。
所以無論如何最小值一定是0阿.....
我稍微幫你更改程式碼然後做上解釋,你參考看看
import java.util.Scanner;
public class max{
public static void main(String [] args){
double sum = 0;
Scanner input = new Scanner(System.in);
double x[] = new double[10];
double mean;//計算平均
Double min = Double.NaN;//存最小值,一開始沒值存,存Nan
Double max = Double.NaN;//存最大值
System.out.println("Enter no more than 10 numbers");
//平均值不應該在迴圈裡面計算
//你應該在迴圈裡面計算玩總和後再算平均
for(int i = 0; i < x.length; i++)//從0開始儲存
{
x[i] = input.nextDouble();
// if(x[i] <=0)
// break;
// 不需要,沒有要在迴圈裡面算平均,不必在乎0不0的問題
if (i==0){//為空時自動儲存,只會發生在第一次輸入
min = x[i];
max = x[i];
}else if(x[i]<min){//如果新輸入的東西小於min
min = x[i];
}else if(x[i]>max){//如果新輸入的東西大於max
max = x[i];
}
// if(x[i] > max )
// max = x[i];
//用不到
sum = sum + x[i];
// mean = sum / i;
// 用不到
}
mean = sum/x.length;
System.out.println("Sum =" + Math.round(sum * 100.0) / 100.0);
System.out.println("mean =" +Math.round(mean * 100.0) / 100.0);
System.out.println("min =" + min);//你這邊怎麼沒換下一排
System.out.print("max =" + max);
}
}
簡單來說,你的猜想是對的。
被break阻礙。
只是我不會用這樣的說詞就是了。
因為這你得思考為何需要這樣做的原因。
而不是只會照COPY過來。
一般理論上來說,想取得最大值。
if(x[i] <=0)
break;
這個運算式理論上是對這個函數沒用處才對,且又會甘擾計算運行。
那為何會有此一判斷?
基本上來說,這有可能是有所謂的0值不判斷的因素存在。
可能是將0值當關閉或是無限值。還是預設值。
如果你是COPY的,你得先去了解其用處。如果你自已根本沒我上面說的意思。
那就將這一段拿掉就好了。
看看下圖的執行結果是否比較能理解原因
(輸入值 2,4,6,8,1,3,5,7,9)
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String [] args){
double sum = 0;
Scanner input = new Scanner(System.in);
double x[] = new double[10];
double mean = 0;
double min =x[0];
double max =x[0];
System.out.println("Enter no more than 10 numbers");
System.out.println("Begin:"+" min =" + min+" max =" + max+" Sum="+Math.round(sum * 100.0) / 100.0+" mean =" +Math.round(mean * 100.0) / 100.0);
for(int i = 1; i < x.length; i++)
{
x[i] = input.nextDouble();
if(x[i] <=0)
break;
if (x[i]< min)
min = x[i];
if(x[i] > max )
max = x[i];
sum = sum + x[i];
mean = sum / i;
System.out.println("i="+i+" x[i]="+x[i]+" min =" + min+" max =" + max+" Sum="+Math.round(sum * 100.0) / 100.0+" mean =" +Math.round(mean * 100.0) / 100.0);
}
System.out.println("Sum =" + Math.round(sum * 100.0) / 100.0);
System.out.println("mean =" +Math.round(mean * 100.0) / 100.0);
System.out.print("min =" + min);
System.out.print("max =" + max);
}
}
因為
一開始double min =x[0];
之後 min=0
之後
if (x[i]< min)
min = x[i];
這兩列寫的是「當輸入的數字比 min 小,把 min 設為該數字」
輸入的9個數字是 2,4,6,8,1,3,5,7,9
沒有任何一個數字比 min (0) 小
所以一直到最後 min 也是0
可以把一開始那列改成double min = 99999;
再看看 min 的結果
那如果我一開始的double min =x[0];
是想宣告 min = x[]第一個輸入的數值,那應該如果宣告?
一般不會寫在宣告的地方
而是類似以下的寫法
if (i==1) {
min = x[i];
} else {
if (x[i]< min)
min = x[i];
}