求一个输入几个年份之后,然后自动输出最早最晚和平均年份的java代码

第1部分

用Years.Java编写一个Java程序。程序将从标准输入读取一系列数字,然后输出到标准输出。每个号码都将输入到自己的行中。第一个数字ii表示将输入的年数。随后的每个数字代表一年。一旦进入第二年,程序应输出以下内容(用年平均值的下限替换<平均值>,<最早>替换最早年份,<最晚>替换最晚年份):

如果用户没有为ii输入数字,程序应输出“无效年数”并退出。如果年数小于1年或大于5年,则应产生相同的输出。

如果用户未输入年份,程序应输出“非年份”并退出。如果年份早于0,程序应输出“年份不能早于0”并退出。如果年份在2021年之后,程序应输出“年份尚未发生”并退出。

该程序应该能够用javac Years.java编译并用java Years执行。

第2部分:Bash脚本

为了演示编译和运行Java代码的能力,以及基本Unix命令的知识,必须提供一个名为run.sh的文件。此文件应包含执行以下操作的命令:

将文件sample.im重命名为sample.in

编译Years.java

运行年份,无命令行参数,从新重命名的sample.in输入管道

删除文件Years.class

打印到终端“成功”

要在本地测试脚本,请运行sh run.sh。

如果需要刷新各种Unix命令,这将提供所有可用命令的列表,手册页(可通过终端使用man访问)提供有关如何使用这些命令的详细说明。

请注意,您不需要对丢失的文件等执行任何错误处理。脚本应该只为上面的每个步骤运行相应的命令,假设前一个步骤能够正确执行。

这两个问题都很简单,尤其是第二个
years · master · greatofdream / javaexample · CODE CHINA CODE CHINA——开源代码托管平台,独立第三方开源社区,Git/Github/Gitlab https://codechina.csdn.net/zaq15csdn/javaexample/-/tree/master/years
一共三份文件,sample.im是作为样例输入,你可以直接克隆我的仓库,我把除了输入的代码放在下面

import java.util.Scanner;
public class Years{
        public static void main(String[] args){
                System.out.println("Please input the number of Years");
                Scanner scan = new Scanner(System.in);
                int n;
                if(scan.hasNextInt()){
                        n = scan.nextInt();
                        if((n<1)||(n>5)){
                                System.out.println("无效年数");
                                return;
                        }
                }else{
                        System.out.println("无效年数");
                        return;
                }
                int[] years = new int[n];
                int maxy=0;
                int miny=2021;
                double meany=0;
                for(int i=0;i<n;i++){
                        System.out.println(i+"th");
                        if(scan.hasNextInt()){
                                years[i] = scan.nextInt();
                                if(years[i]<0){
                                        System.out.println("年份不能早于0");
                                        return;
                                }else if(years[i]>2021){
                                        System.out.println("");
                                        return;
                                }else{
                                        if(years[i]>maxy)
                                                maxy = years[i];
                                        if(years[i]<miny)
                                                miny = years[i];
                                        meany += years[i];
                                }
                        }else{
                                System.out.println("非年份");
                                return;
                        }
                }
                System.out.println("平均值"+(int)Math.floor(meany/n));
                System.out.println("最早"+miny);
                System.out.println("最晚"+maxy);
                return;
        }
}
mv sample.im sample.in
javac Years.java
cat sample.in|java Years
rm Years.class
echo "成功

思路:
定义一个数组,把所有年份输入,然后进行排序,最后输出即可。

我就说这么简单的问题咋没人做,原来是第二部分麻烦

第一问:

//javac -encoding utf-8 Year.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Years {
    public static void main(String[]args){
        int  ii = 0, i =  0;
        int year = -1,   sum = 0;
        List<Integer> list = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年数");
        if(scanner.hasNextInt()){/*检查年数合理性*/
            ii = scanner.nextInt();     /*输入数字*/
            if(ii<1||ii>5){
                System.out.println("无效年数");
                return;
            }
            for(i=0; i<ii; i++) { /*输入定量的年份*/
                System.out.print("请输入第" + (i + 1) + "年数:");
                if(!scanner.hasNextInt()){
                    System.out.println("非年份");
                    break;
                }
                year = scanner.nextInt();
                if(year<0) {
                    System.out.println("年份不能早于0");
                    break; /*跳出程序*/
                }else if(year>2021){
                    System.out.println("年份尚未发生");
                    break; /*跳出程序*/
                }
                list.add(year);
                sum+=year;
                /*用年平均值的下限替换<平均值>,<最早>替换最早年份,<最晚>替换最晚年份*/
                System.out.println("<"+ sum / (i+1) +">,<"+Collections.min(list)+">,<"+ Collections.max(list)+">");                
            }
        }else{
            System.out.println("无效年数");
        }
    }
}

img
第二问

# run.sh
# 修改名字
mv sample.im sample.in; 
# 编译
javac Years.java;
# 从新重命名的sample.in输入管道|
cat sample.in|java Years;  
# 删除文件
rm Years.class;
echo "成功";
5
1
2
3
4
5

img

img