Java程序设计实验5 | Java API应用

*本文是博主对Java各种实验的再整理与详解,除了代码部分和解析部分,一些题目还增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人自己的补充,以方便大家额外学习、参考。

(解析部分还没加,过几天补)

目录

一、实验目的

二、实验内容

1、字符串加密

2、模拟用户登录

3、统计字符个数

4、字符串缓冲区练习

(1)使用StringBuffer类对键盘输入的字符串进行反转。

(2)使用String和StringBuffer类分别对数组进行字符串拼接,使其变成一个字符串。

5、生成验证码

6、春节倒计时

7、二月天

8、正则表达式。(选做)

三、实验总结 


一、实验目的

1、掌握String、StringBuffer和StringBuilder类的使用;

2、掌握System和Runtime类的使用;

3、掌握Math和Random类的使用;

4、掌握日期时间类的使用;

5、掌握包装类的使用;

6、了解正则表达式的使用。


二、实验内容

1、字符串加密

键盘输入一个原始字符串作为明文,然后使用加密方法加密,再对加密字符串进行解密。样例如下图,加密方法自定,完成其功能并测试。

源代码:

import java.util.Scanner;

public class S5_1 {
    public static void main(String[] args) {
        System.out.print("明文:");
        Scanner in = new Scanner(System.in);
        String x = in.nextLine();
        System.out.println("***************************");
        System.out.println("加密方法:每个字符的ASCII码加1");
        System.out.println("***************************");
        System.out.print("密文:");
        char[] a = x.toCharArray();

        for (int i = 0; i < a.length; i++) {
            a[i] += 1;
            System.out.print(a[i]);
        }

        System.out.println();
        System.out.println("***************************");
        System.out.print("解密:");
        for (int i = 0; i < a.length; i++) {
            a[i] -= 1;
            System.out.print(a[i]);
        }
    }
}

列出测试数据和实验结果截图: 

2、模拟用户登录

编写一个程序,模拟用户登录。程序要求如下:

(1)用户名和密码正确(不区分大小写),提示“登录成功”,并打开Windows的计算器程序;

(2)用户名或密码不正确,提示“用户名或密码错误”;

(3)总共有3次登录机会,超过3次,则提示“登录失败,无法再继续登录”。

源代码:

import java.util.Scanner;

public class S5_2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 定义正确的用户名和密码(不区分大小写)
        String correctUsername = "admin";
        String correctPassword = "password";

        // 设置最大登录次数
        int maxLoginAttempts = 3;
        int remainingLoginAttempts = maxLoginAttempts;

        // 循环进行用户登录
        while (remainingLoginAttempts > 0) {
            // 用户输入用户名和密码
            System.out.print("请输入用户名:");
            String username = scanner.nextLine().toLowerCase(); // 将用户名转换为小写进行不区分大小写比较
            System.out.print("请输入密码:");
            String password = scanner.nextLine();

            // 验证用户名和密码
            if (username.equals(correctUsername) && password.equals(correctPassword)) {
                System.out.println("登录成功!正在打开Windows的计算器程序...");
                // 在这里可以添加打开计算器程序的代码
                break; // 登录成功,跳出循环
            } else {
                System.out.println("用户名或密码错误。剩余登录次数:" + (--remainingLoginAttempts));
                if (remainingLoginAttempts > 0) {
                    System.out.println("请重新输入。\n");
                } else {
                    System.out.println("登录失败,无法再继续登录。");
                }
            }
        }

        scanner.close();
    }
}

列出测试数据和实验结果截图: 

输入错误的情况:

输入正确的情况:

3、统计字符个数

从键盘输入一个字符串,分别统计该字符串中所有大写字母、小写字母、数字、其它字符的个数,并分类输出这些字符和统计结果。(提示:不考虑字符内容,例如:Hello123World,大写2个,小写8个,数字3个。)

源代码:

import java.util.Scanner;

public class S5_3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 从键盘输入字符串
        System.out.print("请输入一个字符串:");
        String inputString = scanner.nextLine();

        // 统计字符个数
        int uppercaseCount = 0;
        int lowercaseCount = 0;
        int digitCount = 0;
        int otherCount = 0;

        // 遍历字符串中的每个字符
        for (char ch : inputString.toCharArray()) {
            if (Character.isUpperCase(ch)) {
                uppercaseCount++;
            } else if (Character.isLowerCase(ch)) {
                lowercaseCount++;
            } else if (Character.isDigit(ch)) {
                digitCount++;
            } else {
                otherCount++;
            }
        }

        // 输出统计结果
        System.out.println("大写字母个数:" + uppercaseCount);
        System.out.println("小写字母个数:" + lowercaseCount);
        System.out.println("数字个数:" + digitCount);
        System.out.println("其他字符个数:" + otherCount);

        scanner.close();
    }
}

列出测试数据和实验结果截图: 

4、字符串缓冲区练习

(1)使用StringBuffer类对键盘输入的字符串进行反转。

源代码:

import java.util.Scanner;

public class S5_4_1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 从键盘输入字符串
        System.out.print("请输入一个字符串:");
        String inputString = scanner.nextLine();

        // 使用StringBuffer进行字符串反转
        StringBuffer reversedStringBuffer = new StringBuffer(inputString);
        reversedStringBuffer.reverse();

        // 输出反转后的字符串
        System.out.println("反转后的字符串:" + reversedStringBuffer.toString());

        scanner.close();
    }
}

列出测试数据和实验结果截图: 

(2)使用String和StringBuffer类分别对数组进行字符串拼接,使其变成一个字符串。

源代码:

public class S5_4_2 {
    public static void main(String[] args) {
        // 使用String类进行数组字符串拼接
        String[] stringArray = {"Hello", ", ", "world", "!"};
        String concatenatedString = concatenateWithString(stringArray);
        System.out.println("使用String类拼接的字符串:" + concatenatedString);

        // 使用StringBuffer类进行数组字符串拼接
        StringBuffer stringBuffer = concatenateWithStringBuffer(stringArray);
        System.out.println("使用StringBuffer类拼接的字符串:" + stringBuffer.toString());
    }

    // 使用String类进行数组字符串拼接
    public static String concatenateWithString(String[] array) {
        String result = "";
        for (String str : array) {
            result += str;
        }
        return result;
    }

    // 使用StringBuffer类进行数组字符串拼接
    public static StringBuffer concatenateWithStringBuffer(String[] array) {
        StringBuffer result = new StringBuffer();
        for (String str : array) {
            result.append(str);
        }
        return result;
    }
}

列出测试数据和实验结果截图: 

5、生成验证码

使用Random类创建一个6位的验证码,其中包含数字、字母的组合,并通过键盘输入该验证码,验证通过(不区分大小写)时提示“恭喜验证成功!”,否则提示“验证失败!”。 

源代码:

import java.util.Random;
import java.util.Scanner;

public class S5_5 {
    public static void main(String[] args) {
        // 生成验证码
        String verificationCode = generateVerificationCode();
        System.out.println(verificationCode);

        // 提示用户输入验证码
        System.out.print("请输入验证码(不区分大小写): ");
        Scanner scanner = new Scanner(System.in);
        String userInput = scanner.nextLine();

        // 验证输入的验证码
        if (verifyVerificationCode(userInput, verificationCode)) {
            System.out.println("恭喜验证成功!");
        } else {
            System.out.println("验证失败!");
        }

        scanner.close();
    }

    // 生成6位验证码
    private static String generateVerificationCode() {
        StringBuilder code = new StringBuilder();
        Random random = new Random();

        for (int i = 0; i < 6; i++) {
            // 随机选择数字或字母
            int choice = random.nextInt(2);
            if (choice == 0) {
                // 生成数字
                code.append(random.nextInt(10));
            } else {
                // 生成字母
                char randomChar = (char) ('A' + random.nextInt(26));
                // 随机选择字母是大写还是小写
                if (random.nextBoolean()) {
                    randomChar = Character.toLowerCase(randomChar);
                }
                code.append(randomChar);
            }
        }

        return code.toString();
    }

    // 验证输入的验证码是否匹配
    private static boolean verifyVerificationCode(String userInput, String verificationCode) {
        return userInput.equalsIgnoreCase(verificationCode);
    }
}

列出测试数据和实验结果截图: 

6、春节倒计时

根据所学知识,计算明年(兔年2023年)春节的倒计时天数并输出:“距离兔年春节还有***天”。

源代码: 

import java.time.LocalDateTime;

public class S5_6 {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("春节倒计时");
        System.out.println("距离兔年春节还有");

        LocalDateTime newYear = LocalDateTime.of(2023, 1, 21, 0, 0, 0);
        LocalDateTime now = LocalDateTime.now();
        System.out.println(newYear.getDayOfYear() + (newYear.getYear() - now.getYear()) * 365 - now.getDayOfYear() - 1 + "天");
        System.out.print(newYear.getHour() - now.getHour() + 23 + ":");
        System.out.print(newYear.getMinute() - now.getMinute() + 59 + ":");
        System.out.print(newYear.getSecond() - now.getSecond() + 59);
        System.out.println();
    }
}

列出测试数据和实验结果截图: 

7、二月天

二月是一个有趣的月份,平年的二月有28天,闰年的二月有29天。编写一个程序,从键盘输入年份,根据输入的年份计算这一年的二月有多少天。

源代码: 

import java.util.Scanner;

public class S5_7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 提示用户输入年份
        System.out.print("请输入年份: ");
        int year = scanner.nextInt();

        // 判断是否为闰年,并计算二月的天数
        int daysInFebruary = isLeapYear(year) ? 29 : 28;

        // 输出结果
        System.out.println(year + "年的二月有 " + daysInFebruary + " 天。");

        scanner.close();
    }

    // 判断是否为闰年的方法
    private static boolean isLeapYear(int year) {
        // 闰年的条件:年份能被4整除但不能被100整除,或者能被400整除
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }
}

列出测试数据和实验结果截图: 

 

8、正则表达式。(选做)

“中华人民共和国成立于1949年10月1日”,利用正则表达式提取出其中的数字。

源代码: 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class S5_8 {
    public static void main(String[] args) {
        String inputString = "中华人民共和国成立于1949年10月1日";

        // 定义正则表达式匹配数字
        String regex = "\\d+";

        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);

        // 创建Matcher对象
        Matcher matcher = pattern.matcher(inputString);

        // 提取数字并输出
        while (matcher.find()) {
            String number = matcher.group();
            System.out.println("提取的数字:" + number);
        }
    }
}

列出测试数据和实验结果截图: 


三、实验总结 

1、通过本实验,我理解了String、StringBuffer和StringBuilder类的使用以及String、StringBuffer和StringBuilder的异同:

  • 相同点:它们的底层都是通过char数组实现。
  • 不同点:①String对象一旦创建其值就不能修改的,如果要修改,将重新开辟内存空间来存储修改之后的对象,而StringBuffer和StringBuilder对象的值可以被修改的;②如果需要对字符串进行频繁的修改,不要使用String,因为会造成内存空间的浪费。

2、掌握了System和Runtime类的使用,用System类中的方法打开系统中的某些程序。

3、掌握了Math和Random类的使用,掌握了如何通过Random类或Math类中的Random()方法生成随机数。

4、掌握了日期时间类的使用。学会了如何编程求出某一时间距离当前时间还差多少时间。

5、对正则表达式有了一个初步的了解。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
包与接口实验报告 实验 包与接口 【实验目的】 1. 了解Java 中包(package)、接口(interface)的作用。 2. 掌握包、接口设计方法。 【实验要求】 1. 了解Java 系统包的结构。 2. 掌握创建自定义包的方法。 3. 掌握使用系统接口的技术和创建自定义接口的方法。 【实验步骤】 一.了解并使用Java 的系统包 1. API 包、接口、异常处理的作用 包是和接口的集合。利用包可以把常用的或功能相似的放在一个包中。Java 语言提供系统包,其中包含了大量的,可以在编写Java 程序时直接引用它们。为便于管理和使用它们,将这些分为了不同的包。包又称库或API 包,所谓API(Application Program Interface)即应用程序接口。API 包—方面提供丰富的方法供大家使用,如画图形、播放声音等,另一方面又负责和系统软硬件打交道,圆满实现用户程序的功能。所有Java API 包都以“java.”开头,以区别用户创建的包。 常见Java系统包及其作用: 1)语言包(java.lang):提供的支持包括字符串处理、多线程处理、异常处理、数学函数处理等,可以用它简单地实现Java程序的运行平台。 2)实用程序包(java.util):提供的支持包括哈希表、堆栈、可变数组、时间和日期等。 输入输出包(java.io):用统一的流模型来实现所有格式的I/O,包括文件系统、网络、输入。 3)网络包(java.net):支持Internet的TCP/IP协议,用于实现Socket编程;提供了与Internet的接口,支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。 4)抽象图形用户接口包(javax.swing):实现了不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条、对话框等,使得 Java可以移植到不同的平台。 接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
院(系) 计算机学院 专业 计算机科学与技术 班级 计科2班 姓名 学号 同组人 无 实验室 S4305 组号 日期 课程 Java程序设计 指导教师 成绩 实验项目编号 8103200401 实验项目名称 使用Eclipse编写Java程序 1. 实验目的 熟悉Eclipse集成开发环境。 2. 实验环境 Windows XP 操作系统 Eclipse 3. 实验原理 使用Eclipse编写Java程序,掌握Eclipse中调试器的使用。 4. 算法设计 【任务一】编写控制平台程序,在屏幕上输出"Hello World"信息。 【任务二】编写控制平台程序,要求用户从键盘输入本人姓名**,在屏幕上输出"**,你 好!"信息。 5. 主要代码及说明 【任务一】 【任务二】 六.实验小结 通过本次上机,对Eclipse集成开发环境有所了解,知道了Java环境变量的配置及 如何在DOS窗口下运行Java程序。 ----------------------- JAVA实验报告-实验一全文共2页,当前为第1页。 public class HelloJava { public static void main(String[] args) { System.out.println("Hello World "); } } import java.util.Scanner; public class Wriࠀࠊࠚࠢ࠲࠺ࡌࡎࡔࡸࡾ࢜ࢦࢼࣄ࣢࣪ईऒपबलॊॖ८ॺ঒ঔঢশ৆২৲৺ৼ਀ter{ public static void main(String[] args) {/ /主方法 Scanner in = new Scanner(System.in); // 调用键盘输入API System.out.println("请输入内容"); //显示 "请输入内容" String name=in.nextLine(); //定义String 型的变量answer System.out.println(name+",你好!"); } } //输出 JAVA实验报告-实验一全文共2页,当前为第2页。
实验5 常用(2学时) 一、实验目的 1. 熟悉Java中的String、StringBuffer、Math、包装器的使用方法。 2. 使用常用解决一般性的应用问题。 3. 掌握JavaSE API文档的使用方法。 二、实验内容 1. 编写一个程序,输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母数。(字符串可以在main方法指定) 2. 调用java.lang.Math的成员函数“public static double random()”运算下面表达式1000次,(int) (Math.random()*20+0.5),统计其中生成的整数0、1、2、……、20的个数分别是多少,并输出统计结果。 3. 编写一个方法,返回一个double型的二维数组,数组中的元素通过解析字符串参数获得。例如,字符串参数:“1,2;3,4,5;6,7,8”,对应的数组为: d[0,0] = 1.0 d[0,1] = 2.0 d[1,0] = 3.0 d[1,1] = 4.0 d[1,2] = 5.0 d[2,0] = 6.0 d[2,1] = 7.0 d[2,2] = 8.0 三、实验要求 完成程序设计并提交实验报告实验6 容器(2学时) 一、实验目的 1. 熟悉容器库中常用的使用方法。 2. 使用常用容器解决一般性的应用问题。 二、实验内容 1. 用HashMap模拟一个网上购物车。要求:从键盘输入5本书的名称、单价、购买数量,将这些信息存入一个HashMap,然后将该HashMap作为参数调用方法getSum(HashMap books),该方法用于计算书的总价并返回。【说明:键盘输入可以使用Scanner】 2. 使用两个Stack(JDK容器库中的Stack)实现一个队列MyQueue,提供队列的入队列和出队列操作:enQueue和deQueue。 3. 写一个彩票程序:30选7。随机(1~30之间)生成7个随机数,注意不能重复。然后从键盘输入7个数,对比7个数是否与随机数有相同的。最后显示“中了几个号”。同时,如果中了7个号,显示一等奖;如果中了6个号,显示二等奖;如果中了5个号,显示三等奖。要求:首先写出程序的实现思想,特别是程序所使用的数据结构,然后写出Java实现代码。【说明:键盘输入可以使用Scanner】 三、实验要求 完成程序设计并提交实验报告实验7 流(2学时) 一、实验目的 1. 熟悉流库中各种常用流的使用方法。 2. 能够使用流实现基本的文件读写。 二、实验内容 1. 编写程序,在控制台窗口提示输入两个整数,然后接收这两个整数,并输出它们的和。(要求:键盘输入通过流封装System.in获取,不要使用Scanner) 2. 设计学生Student,属性:编号(整型);姓名(字符串),成绩(整型)。编写一个程序:要求:(1)输入5个学生的姓名和成绩,将其姓名和成绩保存到data.txt中;(2)然后从该文件中读取数据,求得这五个学生的平均成绩。 三、实验要求 完成程序设计并提交实验报告
Java实验中,我学习Java语言的基础知识和编程技巧。Java是一种跨平台的编程语言,具有优秀的性能和可移植性,因此在软件开发领域得到了广泛的应用学习Java语言不仅可以提高编程技能,还可以提高软件开发的效率和质量。 Java实验主要包括以下内容: 1. Java语言基础知识:Java语言有自己独特的语法和数据型,需要掌握基础知识才能进行编程。在实验中,我学习Java语言的基本语法、数据型、控制语句、数组、字符串等知识。 2. 面向对象编程:Java是一种面向对象的编程语言,面向对象编程是Java编程的核心。在实验中,我学习了面向对象编程的基本概念、和对象的定义、封装、继承和多态等知识。 3. 异常处理:在Java编程中,异常处理是非常重要的。异常处理可以使程序更加健壮和可靠。在实验中,我学习Java中异常的种、处理方式和抛出异常的方法。 4. 文件操作:在实际的软件开发中,文件操作是非常重要的。在Java实验中,我学习了如何使用Java语言进行文件的读写操作,包括文件的创建、写入、读取和删除等操作。 5. GUI编程:GUI编程是图形用户界面编程的缩写,是Java编程的一个重要方向。在实验中,我学习了如何使用Java Swing和AWT库进行GUI编程,包括窗口、按钮、文本框、标签等控件的创建和使用。 通过这些实验,我深入了解了Java语言的特点和应用领域。我掌握了Java语言的基础知识和编程技巧,提高了我的编程能力和实践能力。在实验过程中,我也学会了如何进行程序设计和开发,如何进行调试和测试,以及如何进行代码的优化。同时,我也意识到在编程过程中需要注重代码的可读性、可维护性和可扩展性,这对于程序的开发和维护都非常重要。 总之,Java实验是我学习Java语言的重要一步。通过Java实验学习,我可以更好地掌握Java语言的特点和应用,提高我的编程能力和实践能力,为将来的软件开发奠定良好的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值