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(); 就不需要强制转换了