Java常见练手程序《“书写”百遍,其义自见》

news2024/11/23 7:57:50

 1、锻炼重写方法、抽象类定义、常量、自定义异常与调用。

  •  建立一个Java抽象类Drink,应当

    a、声明一个抽象方法taste() 该方法负责输出饮料的味道
    b、声明int型常量来代表不同的饮料类型 咖啡、啤酒、牛奶
    c、声明静态方法getDrink(int drinkType) 根据传入的参数创建不同的饮料对象 并返回该对象 建议使用switch语句。该方法要求声明DrinkNotFoundException 当没有相对应的饮料类型时 抛出该异常。

  •  建立Drink的具体子类

    a、分别建立Drink的子类 Coffee 代表咖啡 Beer 代表啤酒 Milk 代表牛奶 ;
    b、实现taste()方法 要求在控制台打印各自的味道特征。
    建立Test测试类 测试以上内容的正确性
    a、编写main方法 通过命令行传参的方式传入某种饮料的类型。
    b、在main方法中 调用Drink类的getDrink方法 获得相应的饮料对象。注意捕获DrinkNotFoundException。
    c、然后调用该饮料对象的taste()方法 输出该饮料的味道。
    编译程序 并运行。

  • Drink类

public abstract class Drink {

    public abstract void taste();

    private static final int COFFEE=1;
    private static final int BEER=2;
    private static final int MILK=3;

    public static Drink getDrink(int drinkType) throws DrinkNotFoundException{
        switch(drinkType){
            case COFFEE:
                return new Coffee();
            case BEER:
                return new Beer();
            case MILK:
                return new Milk();
            default:
                throw new DrinkNotFoundException("Invalid drink type");
        }
    }
}

DrinkNotFoundException(自定义异常类)

public class DrinkNotFoundException extends Exception {
    public DrinkNotFoundException(String message) {
        super(message);
    }
}

Coffee类

public class Coffee extends Drink {
    @Override
    public void taste() {
        System.out.println("咖啡的味道:苦涩");
    }
}

Beer类

public class Beer extends Drink {
    @Override
    public void taste() {
        System.out.println("啤酒的味道:苦中带甜");
    }
}

Milk类

public class Milk extends Drink {
    @Override
    public void taste() {
        System.out.println("牛奶的味道:甜而清香");
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        System.out.println("数字:");
        Scanner scanner=new Scanner(System.in);
        try {
            int drinkType=scanner.nextInt();
            Drink drink = Drink.getDrink(drinkType);
            drink.taste();
        } catch (DrinkNotFoundException e) {
            System.out.println("没有相应的饮料类型");
        }
    }
}

 2、定义复数的类Complex并测试其功能。
    

    14.1. 复数由实部、虚部两个部分组成,在类的定义中应包含保存这两部分信息的内容。

    14.2. 在类中定义构造函数,使用户能够在构造对象的同时为对象赋初值。

    14.3. 在类中定义复数的加法、减法、乘法三个二元操作符来完成复数间的加、减、乘的功能。
    14.4. 通过重载toString,使得Complex类的对象能够显示其自身信息。  

    14.5. 通过显示定义一个成员函数完成对象的赋值操作,使用户能够对Complex类的对象进行赋值。

    14.6. 编写一段主程序(main函数),使用户能够通过这段主程序输入复数并进行复数的计算。

Complex类

public class Complex {
    private double real;
    private double imaginary;

    public Complex(double real, double imaginary) {
        this.real = real;
        this.imaginary = imaginary;
    }
    
    public Complex add(Complex c) {
        double realSum = this.real + c.real;
        double imaginarySum = this.imaginary + c.imaginary;
        return new Complex(realSum, imaginarySum);
    }
    
    public Complex subtract(Complex c) {
        double realDiff = this.real - c.real;
        double imaginaryDiff = this.imaginary - c.imaginary;
        return new Complex(realDiff, imaginaryDiff);
    }
    
    public Complex multiply(Complex c) {
        double realProduct = this.real * c.real - this.imaginary * c.imaginary;
        double imaginaryProduct = this.real * c.imaginary + this.imaginary * c.real;
        return new Complex(realProduct, imaginaryProduct);
    }
    
    public void assign(Complex c) {
        this.real = c.real;
        this.imaginary = c.imaginary;
    }
    
    @Override
    public String toString() {
        return real + " + " + imaginary + "i";
    }
}

Main类

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("请输入第一个复数的实部:");
        double real1 = scanner.nextDouble();
        System.out.println("请输入第一个复数的虚部:");
        double imaginary1 = scanner.nextDouble();
        Complex complex1 = new Complex(real1, imaginary1);
        
        System.out.println("请输入第二个复数的实部:");
        double real2 = scanner.nextDouble();
        System.out.println("请输入第二个复数的虚部:");
        double imaginary2 = scanner.nextDouble();
        Complex complex2 = new Complex(real2, imaginary2);
        
        Complex sum = complex1.add(complex2);
        Complex difference = complex1.subtract(complex2);
        Complex product = complex1.multiply(complex2);
        
        System.out.println("两个复数的和为:" + sum);
        System.out.println("两个复数的差为:" + difference);
        System.out.println("两个复数的积为:" + product);
        
        scanner.close();
    }
}

3、将字符串解析,按照总成绩排序显示学生的信息。


    "张三,语文89,英语75#李四,语文72,英语91#王五,语文67,英语78"
    显示:
        姓名:王五,语文成绩:67,英语成绩78,总成绩:145
        姓名:李四,语文成绩:72,英语成绩91,总成绩:163
        姓名:张三,语文成绩:89,英语成绩75,总成绩:164

public class StudentInfo {
    public static void main(String[] args) {
        String input1 = "张三,语文89,英语75#李四,语文72,英语91#王五,语文67,英语78";
        
        // 将字符串解析为学生信息列表
        List<String> studentInfoList = Arrays.asList(input1.split("#"));
        
        // 创建学生对象数组
        Student[] students = new Student[studentInfoList.size()];

        // 解析学生信息并存储到学生对象数组中
        for (int i = 0; i < studentInfoList.size(); i++) {
            String studentInfo = studentInfoList.get(i);
            String[] infoArray = studentInfo.split(",");
            String name = infoArray[0];
            int chineseScore = Integer.parseInt(infoArray[1].substring(2));
            int englishScore = Integer.parseInt(infoArray[2].substring(2));
            int totalScore = chineseScore + englishScore;
            students[i] = new Student(name, chineseScore, englishScore, totalScore);
        }

        // 按总成绩排序
        Arrays.sort(students, Comparator.comparingInt(Student::getTotalScore));

        // 显示学生信息
        for (int i = students.length - 1; i >= 0; i--) {
            Student student = students[i];
            System.out.println("姓名:" + student.getName() + ",语文成绩:" + student.getChineseScore() +
                    ",英语成绩:" + student.getEnglishScore() + ",总成绩:" + student.getTotalScore());
        }
    }
}

class Student {
    private String name;
    private int chineseScore;
    private int englishScore;
    private int totalScore;

    public Student(String name, int chineseScore, int englishScore, int totalScore) {
        this.name = name;
        this.chineseScore = chineseScore;
        this.englishScore = englishScore;
        this.totalScore = totalScore;
    }

    public String getName() {
        return name;
    }

    public int getChineseScore() {
        return chineseScore;
    }

    public int getEnglishScore() {
        return englishScore;
    }

    public int getTotalScore() {
        return totalScore;
    }
}

4、从键盘上输入一个字符串,利用字符串类提供的方法将大写字母转变为小写字母,小写    字母转变为大写字母,再将前后字符对换,然后输出最后结果。

import java.util.Scanner;

public class StringTransformation {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String input = scanner.nextLine();

        // 将大写字母转换为小写字母,小写字母转换为大写字母
        String transformed = "";
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            System.out.println(c);
            if (Character.isUpperCase(c)) {
                transformed += Character.toLowerCase(c);
            } else if (Character.isLowerCase(c)) {
                transformed += Character.toUpperCase(c);
            } else {
                transformed += c;
            }
        }

        // 将前后字符对换
        StringBuilder reversed = new StringBuilder(transformed);
        reversed.reverse();

        System.out.println("转换后的结果:" + reversed.toString());
    }
}

5、定义一个集合大数据方向,大数据方向下面有三个班级人数分别是7个,10个,15个,使用循环给每个班级添加学生姓名,遍历大数据集合,显示每个班级的学生姓名。

import java.util.ArrayList;
import java.util.List;


public class BigData {
    public static void main(String[] args) {
        List<List<String>> bigData = new ArrayList<>();

        // 添加三个班级
        bigData.add(new ArrayList<>());


        // 班级1
        bigData.add(new ArrayList<>()); // 班级2
        bigData.add(new ArrayList<>()); // 班级3

        // 定义每个班级的人数
        int[] classSizes = {7, 10, 15};

        // 使用循环给每个班级添加学生姓名
        for (int i = 0; i < bigData.size(); i++) {
            List<String> classStudents = bigData.get(i);
            for (int j = 1; j <= classSizes[i]; j++) {
                classStudents.add("学生" + j);
            }
        }

        // 遍历大数据集合,显示每个班级的学生姓名
        for (int i = 0; i < bigData.size(); i++) {
            List<String> classStudents = bigData.get(i);
            System.out.println("班级" + (i+1) + "的学生姓名:");
            for (String student : classStudents) {
                System.out.println(student);
            }
            System.out.println();
        }
    }
}

6、有字符串"aababcabcdabcde",获取字符串中每一个字母出现的次数。


        要求:
                 输出结果格式:a(5)b(4)c(3)d(2)e(1);
                 小括号中是前面字符出现的次数。
        提示:首先使用集合存储不重复的元素,然后用集合中的每一个元素和字符串中的每一个字符进行比较,统计各个字符出现的次数。

import java.util.HashMap;
import java.util.Map;

public class CharacterCount {
    public static void main(String[] args) {
        String str = "aababcabcdabcde";
        Map<Character, Integer> charCountMap = new HashMap<>();

        // 统计每个字符的出现次数
        for (char c : str.toCharArray()) {
            if (charCountMap.containsKey(c)) {
                int count = charCountMap.get(c);
                charCountMap.put(c, count + 1);
            } else {
                charCountMap.put(c, 1);
            }
        }

        // 输出结果
        StringBuilder result = new StringBuilder();
        for (Map.Entry<Character, Integer> entry : charCountMap.entrySet()) {
            result.append(entry.getKey()).append("(").append(entry.getValue()).append(")");
        }

        System.out.println(result.toString());
    }
}

7、键盘录入5个学生的姓名,英语成绩,语文成绩,数学成绩,按照以下要求显示学生的信息。从控制台输入学生的姓名和成绩,如果成绩大于100或小于0则抛出ChengjiFeifaException显示异常信息:成绩不合法!效果图:
        

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class StudentInfo {
    public static void main(String[] args) {
        List<Student1> students = new ArrayList<>();

        Scanner scanner = new Scanner(System.in);

        // 录入学生信息
        for (int i = 0; i < 5; i++) {
            System.out.println("请输入第" + (i + 1) + "个学生的姓名:");
            String name = scanner.next();
            System.out.println("请输入第" + (i + 1) + "个学生的语文成绩:");
            int chineseScore = getValidScore(scanner);
            System.out.println("请输入第" + (i + 1) + "个学生的英语成绩:");
            int englishScore = getValidScore(scanner);
            System.out.println("请输入第" + (i + 1) + "个学生的数学成绩:");
            int mathScore = getValidScore(scanner);

            students.add(new Student1(name, chineseScore, englishScore, mathScore));
        }

        // 按总成绩排序
        students.sort(Comparator.comparingInt(Student1::getTotalScore).reversed());

        // 显示学生信息
        System.out.println("学生信息如下:");
        for (Student1 student : students) {
            System.out.println("姓名:" + student.getName() + ",语文成绩:" + student.getChineseScore() +
                    ",英语成绩:" + student.getEnglishScore() + ",数学成绩:" + student.getMathScore() +
                    ",总成绩:" + student.getTotalScore());
        }
    }

    private static int getValidScore(Scanner scanner) {
        int score;
        while (true) {
            score = scanner.nextInt();
            if (score < 0 || score > 100) {
                try {
                    throw new ChengjiFeifaException("成绩不合法!");
                } catch (ChengjiFeifaException e) {
                    System.out.println("异常信息:" + e.getMessage());
                }
            } else {
                break;
            }
        }
        return score;
    }
}

class Student1 {
    private String name;
    private int chineseScore;
    private int englishScore;
    private int mathScore;
    private int totalScore;

    public Student1(String name, int chineseScore, int englishScore, int mathScore) {
        this.name = name;
        this.chineseScore = chineseScore;
        this.englishScore = englishScore;
        this.mathScore = mathScore;
        this.totalScore = chineseScore + englishScore + mathScore;
    }

    public String getName() {
        return name;
    }

    public int getChineseScore() {
        return chineseScore;
    }

    public int getEnglishScore() {
        return englishScore;
    }

    public int getMathScore() {
        return mathScore;
    }

    public int getTotalScore() {
        return totalScore;
    }
}

class ChengjiFeifaException extends Exception {
    public ChengjiFeifaException(String message) {
        super(message);
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1. 业务场景讲解设计模式(简单工厂模式)

现阶段我之所以再次学习设计模式&#xff0c;是因为感受到企业项目的多层封装与调用的复杂性&#xff0c;既然这样那肯定是有自己的设计道理的&#xff0c;能让系统更具有拓展性&#xff0c;安全性&#xff0c;易维护性。所以&#xff0c;我希望这次站在领导设计者的角度去实现…

如何为IP申请一个SSL证书?

打开www.zerossl.com官网&#xff0c;然后我们直接输入服务器的IP地址&#xff0c;然后直接点击Next Step。 接下来&#xff0c;我们输入自己的邮箱账号&#xff0c;直接注册。&#xff08;如果点击后没有反应&#xff0c;请挂代理访问。&#xff09; 然后我们到了下一页直接点…

mmcv与cuda,pytorch版本匹配要求

mmcv与cuda、pytorch版本兼容要求&#xff0c;见mmcv官方文档&#xff1a;https://mmcv.readthedocs.io/zh_CN/latest/get_started/installation.html#pip 安装部分。 目前网页上默认最新版2.x版本&#xff0c;若要切换旧版&#xff0c;点击页面左下角切换即可。 查看自己的cud…

面向对象设计原则和GOF23种设计模式

写在前面 本文一起看下面向对象的设计原则和GOF 23 种常用的设计模式。 1&#xff1a;面向对象设计原则 面向对象设计原则可以简单的总结为SOLID&#xff0c;分别看下。 1.1&#xff1a;S single responsibility principle&#xff0c;单一职责原则&#xff0c;即一个类只…

百叶隔断为空间添加时尚元素

百叶隔断作为一种常见的空间分隔方式&#xff0c;早已成为了许多家庭、工作场所不可缺少的装修元素之一。而在装修中&#xff0c;如何利用百叶隔断为间添加时尚元素呢&#xff1f; 1. 选择合适的材质 百叶隔断的材质种类繁多&#xff0c;包括木质、金属、PVC等等。在选择时&…

SIT1021,可替代TJA1021一款本地互联网络(LIN)物理层收发器

SIT1021 是一款本地互联网络&#xff08;LIN&#xff09;物理层收发器&#xff0c;符合 LIN 2.0、LIN 2.1、LIN 2.2、LIN 2.2A、 ISO 17987-4:2016 (12V) 和 SAE J2602 标准。主要适用于使用 1kbps 至 20kbps 传输速率的车载网 络。SIT1021 通过 TXD 引脚控制 LIN 总线的状态&a…

MPLS多协议标签交换

最初MPLS多协议标签交换和包交换是竞争关系 随着包交换的快速发展为特快包交换 MPLS最终落败但开展其它业务并且还使用了特快包交换中的FIB表 开展业务为&#xff1a; 解决BGP路由黑洞的最佳方案MPLS VPN MPLS TE 流量工程 MPLS多协议标签交换 工作过程 控制层面&#x…

【Apollo星火计划】—— Cyber基础概念|通信机制

文章目录 前言基本概念1Cyber简介通信构成Bazel简介 TEST1. 构建单包工程TEST2. 构建多包工程基本概念2话题通信服务通信参数通信数据通信基础ProtobufProtobuf简介Protobuf 文件编写Protobuf编译 TEST3. protobuf实验TEST4.C话题通信实践案例TEST5.C服务通信实践案例TEST6.C参…

electron dialog.showMessageBox使用案例

electron 版本&#xff1a;25.3.1 index.html <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Hello World!</title><meta http-equiv"Content-Security-Policy" content"script-src self unsa…

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程

在某鱼上找了一个友善之臂的Tiny6410开发板用来体验一下嵌入式开发。这次先体验一下裸机程序的开发流程&#xff0c;由于这个开发板比较老旧了&#xff0c;官方文档有很多过期的内容&#xff0c;所以记录一下整个过程。 1. 交叉编译器安装 按照光盘A中的文档《04- Tiny6410 L…

C语言非常道 c0609.c 练习6.8

结构类型处理复杂的数据 结构声明位于源文件的开头&#xff0c;相当于结构类型的全局声明 注意&#xff1a;读取或者写入某个文件&#xff0c;都要先打开文件 写入读出函数的参数类型&#xff0c;实参和形参的类型要对应&#xff1b; 上述&#xff1a; & emp 得到一个指向…

Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让我们都成为耍猴高手(超详解)

耍猴第一式 - 隐藏命令 monkey隐藏的两个命令&#xff1a; 1 –pck-blacklist-file<黑名单文件><br><br>–pck-whitelist-file<白名单文件> monkey还有一个隐藏的命令那就是&#xff1a; 1 –f<脚本文件>:可以指定monkey的自定义脚本 一般…

批处理下载视频

一、安装annie Github 上 annie 下载神器的安装及使用教程: https://blog.csdn.net/qq_41780295/article/details/119795152 二、视频下载 安装了annie之后&#xff0c;我们就可以使用命令行下载视频文件了&#xff1b; 例如&#xff0c;打开B站&#xff0c;随便点开一个视频…

能耗监测管理系统

能耗监测管理系统是一种用于监测和管理能源消耗的软件系统&#xff0c;可以帮助企业、机构或个人实现对能源消耗的实时监控、分析和管理。随着能源问题的日益凸显&#xff0c;能耗监测管理系统的重要性也越来越受到人们的关注。本文将从以下几个方面介绍能耗监测管理系统。 一、…

springboot 项目启动不打印spring 启动日志

今天项目遇到一个很奇怪的问题&#xff0c;服务在启动时&#xff0c;不打印spring 的启动日志。经过排查发现是因为其他的依赖引入了 log4j 的依赖&#xff0c;因为我们的项目用的是logback&#xff0c;所以项目中没有log4j 的相关配置&#xff0c;所以干扰到了日志的打印 原因…

使用IntelliJ Idea开发Flink应用程序

使用IntelliJ Idea开发Flink应用程序 一、实验目的二、实验内容三、实验原理四、实验环境五、实验步骤5.1 启动IntelliJ Idea并创建flink项目5.2 编写flink代码5.2.1 准备工作5.2.2 批处理5.2.3 有界流处理5.2.4 无界流处理 ⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何…

剑指Offer第一章——整数

1. 整数 1.1 整数的基础知识 整数是一种基本的数据类型。编程语言可能会提供占据不同内存 空间的整数类型&#xff0c;每种类型能表示的整数的范围也不相同。例如&#xff0c;Java中有4种不同的整数类型&#xff0c;分别为8位的byte&#xff08;-&#xff5e;-1&#xff09;、…

Minecraft 1.20.x Forge模组开发 04.动画效果物品

我们本次实现一个具有动画效果的流星锤: 效果演示 效果演示 效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.20.x Forge模组开发 03.动画生物实体 1.首先我们要使用geckolib制作一个物品和对应的动画: 在blockbench中新建一个

Android TelephonyManager双卡获取数据开启状态异常的可能原因

背景 应用内不指定subId获取数据状态可能会错误&#xff0c;因为可能拿到voice的能力&#xff0c;而非data。 代码逻辑 1、通过TelephonyManager的isDataEnabled()没有指定subId时&#xff0c;调用内部方法isDataEnabledForReason&#xff0c;传入getId()参数以指定subid&am…

设备监测诊断与维护:优化工业生产效率的关键措施

在现代工业生产中&#xff0c;设备的稳定运行对于保障生产效率至关重要。设备监测、诊断和维护作为关键措施&#xff0c;能够帮助企业及时发现设备问题、诊断故障原因&#xff0c;并采取有效维护措施&#xff0c;从而降低生产中断风险&#xff0c;提高生产效率。本文将深入探讨…