T001-UT001-0016

本博客介绍了一个程序设计实例,该程序从标准输入读取实数,直至遇到sort指令时对所有实数进行升序排序,并正确处理非法输入。程序确保输出与输入实数位数保持一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合练习


编写一个程序,从标准输入设备上输入若干实数,要求每行代表一个实数,直到当输入的一行内容为"sort"时,对已输入的所有实数进行生序排序,并将结果打印在标准输出设备上,注意每行输出一个实数。当输入存在不合法时,比如输入除非sort以外的字符时,则输出Error Input并退出程序。 注意,输出的实数必须和输入的实数保留相同的位数。例如,输入的事1.00则输出时也必须是1.00;若输入的是10则输出的也必须是10,而不能是10.00。

举例:1

程序运行后,直接等待输入,如下

1
2
3
4
5
6
7
8
1.00
5.00
3.00
488
321
10
3.01
sort

输出如下:

1
2
3
4
5
6
7
1.00
3.00
3.01
5.00
10
321
488

 

举例二:

输入:

1
2
3
4
5
6
7
8
1.00
5.00
abc
488
321
10
3.01
sort

输出:

1
Error Input

 

注意:输出的最后没有换行

代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class D0016 {
	public static void main(String[] args)throws IOException{
		String reD_I="^[+-]?([0-9]*\\.?[0-9]+|[0-9]+\\.?[0-9]*)$";//"^[+-]?([0-9]*\\.?[0-9]+|[0-9]+\\.?[0-9]*)$";
		String reInt="^([0-9]+)$";//"^([eE][+-]?[0-9]+)$";
		int flag=0;
		//Scanner input=new Scanner(System.in);
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String num=null;
		List<Double> numsort = new ArrayList<Double>();
		List<Integer> numInteger = new ArrayList<Integer>();
		List<String> numDouble = new ArrayList<String>();
		while(true){
			//num=input.nextLine();
			num=br.readLine();
			if(num.equals("sort")){
				if(flag==1){
					System.out.print("Error Input");
					return;
				}
				break;
			}else{
				if(num.matches(reD_I)){
					if(num.matches(reInt)){
						int numInt= Integer.parseInt(num);
						numInteger.add(numInt);
					}else{
						numDouble.add(num);
					}
					double numD=Double.parseDouble(num);
					numsort.add(numD);
				}else{
					flag=1;
					//System.out.print("Error Input");
					//return;
				}
			}
		}
		Collections.sort(numsort);
		for(int i=0;i<numsort.size();i++){
			int j=0,z=0;
			while(numDouble.size()!=0){
				double numDouble1=Double.parseDouble(numDouble.get(j));
				if((double)numsort.get(i)==numDouble1){
					System.out.print(numDouble.get(j));
					if((double)numsort.get(numsort.size()-1)!=numDouble1)System.out.println();
					break;
				}else{
					j++;
					if(j==numDouble.size()){
						break;
					}
				}
			}
			while(numInteger.size()!=0){
				if(numsort.get(i)==(double)numInteger.get(z)){//(double)
					System.out.print(numInteger.get(z));
					if(numsort.get(numsort.size()-1)!=(double)numInteger.get(z))System.out.println();
					break;
				}else{
					z++;
					if(z==numInteger.size()){
						break;
					}
				}
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值