java 输入double型数并求最大和最小

import java.io.*;
import java.util.*;
public class MaxAndMin {
double max;
double min;

public static void main(String[] args) {

    MaxAndMin m=new MaxAndMin();
    m.cmp();
}
public void cmp(){
    ArrayList a=new ArrayList();
    System.out.println("Please enter four double numbers:");        
    BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
    try{
    String line=reader.readLine();
    while(line != null){
        a.add(new Double(line));    
        line=reader.readLine();
    }
    int size=a.size();
    double[] d=new double[size];
    for(int i=0;i<size;i++){
        d[i]=((Double)a.get(i)).doubleValue();      
    }
    for(int i=0;i<size-1;i++){
        if(d[i]<d[i+1]){
            max=d[i+1];
            min=d[i];
        }
        else{
            max=d[i];
            min=d[i+1];
        }
    }
    System.out.println("The maxinum number is "+max);
    System.out.println("The mininum number is "+min);
    }catch(IOException ex){
        ex.printStackTrace();
    }

}

}
这个程序是要从键盘输入若干个double类型的数,然后比较,找出最大的和最小的并输出。
不知道这个程序错在哪里?在eclipse运行时,我每输入一个数就按下回车,输入四个数后,按回车,第五个什么也不输入,直接按回车,没有结果。??

[quote]又帮我解决了一个问题,谢了,只剩最后一个问题了
a.add(new Double(line)); 这个已经有new Double了,为什么这个地方还需要一个强制类型转换
d[i]=((Double)a.get(i)).doubleValue(); [/quote]
如果你是用jdk1.5及以上版本就不需要这样做了

[code="java"]
while(line != null){
a.add(new Double(line));
line=reader.readLine();
}

[/code]
这个是死循环,加个退出条件,比如计数

[code="java"]
int n=4;
while(n-->0){
a.add(new Double(line));
line=reader.readLine();
}

[/code]

[quote]不能比较输入的任何n个数的大小,有没有其他方法? [/quote]

[code="java"]
while(line != null){
if(line.equals("exit"))break;//输入特定的命令指示终止
a.add(new Double(line));
line=reader.readLine();
}

[/code]

测试已经通过了,代码如下:
import java.io.*;
import java.util.*;
public class MaxAndMin {
double max;
double min;

public static void main(String[] args) { 

    MaxAndMin m=new MaxAndMin(); 
    m.cmp(); 
} 
public void cmp(){ 
    ArrayList a=new ArrayList(); 
    System.out.println("Please enter four double numbers:"); 
    BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); 
    try{ 
        String line=reader.readLine(); 
        while(line != null&&!line.equals("")){ 
            a.add(new Double(line)); 
            line=reader.readLine(); 
        } 
        int size=a.size();
        if(size==0){
            return;
        }
        double[] d=new double[size]; 
        for(int i=0;i<size;i++){ 
            d[i]=((Double)a.get(i)).doubleValue(); 
        } 
        max=min=d[0];
        for(int i=1;i<size;i++){ 
             if(max <d[i] ){
                 max = d[i];
             }
             if(min > d[i]){
                 min = d[i];
             }
        } 
        System.out.println("The maxinum number is "+max); 
        System.out.println("The mininum number is "+min); 
    }catch(IOException ex){ 
        ex.printStackTrace(); 
    } 

} 

}

注意,不能输入任何非数字符,如果不想输入数了,就直接回车。

[quote]BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
[/quote]
System.in
“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
一直处于等待输入状态,while(line != null)这个条件一直都成立,即使直接敲回车,line=""(空字符串)也是不为null的 ,所以死循环。

其实可以这样写:[code="java"]
double max=-1;
double min=Double.MAX_VALUE;
while(!(line=reader.readLine()).equals("")){
double d=Double.parseDouble(line);
if(d>max)max=d;
if(d<min)min=d;
}

[/code]

不需要存所有的输入,节约空间,代码也简洁

ArrayList a=new ArrayList();
将此代码改成ArrayList a=new ArrayList(); 就不需要强制转换了