第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("无效年数");
}
}
}
第二问
# 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