目录
一:程序填空
5-1:输入一行字符,请分别统计出英文字母、数字、空格和其他字符个数
5-2:实现字符串大小写的转换并倒序输出。
5-3:从键盘输入两个日期,格式如:2022-06-18。判断两个日期的先后,并输出它们之间间隔的天数、周数(不足一周按0计算)。
二:函数题
6-1:字符串加密程序
三:编程题
7-1:矩阵相加
7-2:NCHU_学号识别
一:程序填空
5-1:输入一行字符,请分别统计出英文字母、数字、空格和其他字符个数
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
char x[]=str.toCharArray();
int a=0;
int b=0;
int c=0;
int d=0;
for (int i = 0; i < str.length(); i++) {
char ch = x[i];
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'){
a++;
} else if (ch>='0'&&ch<='9') {
b++;
}else if(ch==' '){
c++;
}else {
d++;
}
}
System.out.println("letters="+a);//输出英文字母个数
System.out.println("digits="+b);//输出数字个数
System.out.println("spaces="+c);//输出空格个数
System.out.println("others="+d);//输出其他字符个数
}
}
5-2:实现字符串大小写的转换并倒序输出。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
StringBuffer sb = new StringBuffer();
String s1 = null;
for (int i = str.length() - 1; i >= 0; i--) {
char curChar = str.charAt(i);
if (curChar >= 'a' && curChar <= 'z') {
s1 = String.valueOf(sb.append(String.valueOf(curChar).toUpperCase()));
} else if (curChar >= 'A' && curChar <= 'Z') {
s1 = String.valueOf(sb.append(String.valueOf(curChar).toLowerCase()));
} else {
s1 = String.valueOf(curChar);
sb.append(curChar);
}
}
System.out.println(sb.toString());
}
}
5-3:从键盘输入两个日期,格式如:2022-06-18。判断两个日期的先后,并输出它们之间间隔的天数、周数(不足一周按0计算)。
输入样例1:
2000-02-18
2000-03-15
输出样例1:
第一个日期比第二个日期更早
两个日期间隔26天
两个日期间隔3周
预备知识:通过查询Java API文档,了解Scanner类中nextLine()等方法、String类中split()等方法、Integer类中parseInt()等方法的用法,了解LocalDate类中of()、isAfter()、isBefore()、until()等方法的使用规则,了解ChronoUnit类中DAYS、WEEKS、MONTHS等单位的用法。
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
String [] dateStr1 = s1.split("-");
String [] dateStr2 = s2.split("-");
int year1 = Integer.parseInt( dateStr1[0] );
int month1 = Integer.parseInt( dateStr1[1] );
int day1 = Integer.parseInt(dateStr1[2]);
int year2 = Integer.parseInt( dateStr2[0] );
int month2 = Integer.parseInt( dateStr2[1] );
int day2 = Integer.parseInt( dateStr2[2] );
LocalDate date1 = LocalDate.of(year1, month1, day1);
LocalDate date2 = LocalDate.of(year2,month2,day2);
if (date1.isAfter(date2)) {
System.out.println("第一个日期比第二个日期更晚");
} else {
System.out.println("第一个日期比第二个日期更早");
}
long dayCount = date1.until(date2,ChronoUnit.DAYS) ;
long weekCount = date1.until(date2, ChronoUnit.WEEKS);
System.out.println("两个日期间隔" + Math.abs(dayCount) + "天" );
System.out.println("两个日期间隔" + Math.abs(weekCount) + "周" );
sc.close();
}
}
二:函数题
6-1:字符串加密程序
现需要设计一个字符串加密程序String getHint(String str, String key),该程序接收两个字符串变量分别为str和key,加密规则如下:
1.当str与key相同位置字符相同时,显示该字符;
2.当str与key相同位置字符不同且str中出现key中包含的字符时,str中该字符加密为+;
3.当str中某个字符不存在上述两种情况的字符加密为*。
函数调用示例:
getHint("AAAAA","HARPS"); //+A+++
getHint("HELLO","HARPS"); //H****
getHint("HEART","HARPS"); //H*++*说明:只需要补全public static String getHint(String str, String key)静态方法即可
输入样例:
AAAAA
HARPS
输出样例:
+A+++
裁判测试程序样例:
import java.util.Scanner;
public class Main {
public static String getHint(String str, String key)
{
/* 请在这里填写答案 */
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.nextLine();
String key=in.nextLine();
System.out.println(getHint(str,key));
}
}
答案代码如下:
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char ch1 = str.charAt(i);
char ch2 = key.charAt(i);
if (ch1 == ch2) {
sb.append(ch1);
} else if (key.indexOf(ch1) != -1) {
sb.append("+");
} else {
sb.append("*");
}
}
return sb.toString();
三:编程题
7-1:矩阵相加
求矩阵A+B的结果,程序给出部分代码,请在原来代码基础上填写完整,完成整个程序。
输入格式:
第一行通过键盘输入矩阵的行数和列数
第二行通过键盘输入矩阵A的元素,中间用空格隔开
第三行通过键盘输入矩阵B的元素 ,中间用空格隔开
输出格式:
输出矩阵相加的结果,每一行输出矩阵一行,每一个元素前面有一个空格
输入样例:
2 3
1 2 3 4 5 6
2 3 4 5 6 7
输出样例:
3 5 7
9 11 13
答案代码如下:
import java.util.Scanner;//矩阵相加 C = A + B //写出方法调用
public class Main {
public static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
// TODO Auto-generated method stub
int m = scan.nextInt();//矩阵的行
int n = scan.nextInt();//矩阵的列
//创建二维数组a 行m,列n
int[][] a = new int[m][n];
//调用方法 为a输入数据
inputData(a);
//创建二维数组b 行m,列n
int[][] b = new int[m][n];
//调用方法,为b输入数据
inputData(b);
//调用方法 求 a+b
int[][] d = addMatrix(a,b);
//输出结果
showResult(d);
}
public static void inputData(int[][] arr){
for(int i =0;i<arr.length;i++)
for(int j=0;j<arr[i].length;j++)
arr[i][j] =scan.nextInt();
}
public static int[][] addMatrix(int[][]arr1,int[][]arr2){
int [][] c = new int[arr1.length][arr1[0].length];
for(int i =0;i<arr1.length;i++)
for(int j =0;j<arr1[i].length;j++)
c[i][j] = arr1[i][j] + arr2[i][j];
return c;
}
public static void showResult(int[][] arr){
for(int i =0;i<arr.length;i++){
for(int j =0;j<arr[i].length;j++)
System.out.print(" "+arr[i][j]);
System.out.println();
}
}
}
7-2:NCHU_学号识别
学校的学号由8位数字组成,前两位是入学年份(省略了20);第3、4位是学院编号,01代表材料学院,02代表机械学院,03代表外语学院,20代表软件学院;第5、6位是学院内部班级编号,最后两位是班级内部学号。如:18011103,入学年份是2018年,材料学院,11班,03号
输入格式:
8位数字组成的学号。例如:18011103
注意:输入学号不是8位或者学院编号不是01、02、03、20其中之一,属于非法输入
输出格式:
学号每一项的完整说明。例如:
入学年份:2018年
学院:材料学院
班级:11
学号:03
注意:如非法输入,输出“Wrong Format"
输入样例:
18011103
输出样例:
入学年份:2018年
学院:材料学院
班级:11
学号:03
输入样例1:
18013
输出样例1:
Wrong Format
答案代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String xuehao = sc.next();
if(xuehao.length()!=8){
System.out.println("Wrong Format");
return;
}
String xuehao1 = xuehao.substring(2,4);
if("01".equals(xuehao1)){
xuehao1 = "材料学院";
}else if("02".equals(xuehao1)){
xuehao1 = "机械学院";
} else if ("03".equals(xuehao1)) {
xuehao1 = "外语学院";
} else if ("20".equals(xuehao1)) {
xuehao1 = "软件学院";
}else{
System.out.println("Wrong Format");
return;
}
System.out.println("入学年份:"+"20"+xuehao.substring(0,2)+"年");
System.out.println("学院:"+xuehao1);
System.out.println("班级:"+xuehao.substring(4,6));
System.out.print("学号:"+xuehao.substring(6,8));
}
}