PTA--《面向对象程序设计》作业4-API

目录

一:程序填空

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));
    }
}
  • 27
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值