JAVA刷题集|刷题的狂欢-----JAVA每日三练-----第十天
努力刷题,每日三题,题目来源于《Java课后实战训练手册》----清华大学出版社。
第一题
模拟老师上课前的点名过程,并将旷课的学生作为异常抛出:张三、李四、王五(老师在点名册上记下了“王五旷课”),实现效果如图所示。
文章图片
class Person { private String job;
public String getJob() {return job;
} public void setJob(String job) {this.job = job;
} public void say(String words) {System.out.println(job + ":" + words);
}
}public class CallTheRoll { public static void main(String[] args) {try {Person person1 = new Person();
// 创建对象person1
person1.setJob("老师");
// 设置对象person1的“职称”
person1.say("同学们早上好!现在我们开始点名...");
// 设置对象person1说话的内容Person person2 = new Person();
// 创建对象person2
person2.setJob("班长");
// 设置对象person2的“职称”
person2.say("大家保持安静!准备上课...");
// 设置对象person2说话的内容person1.say("张三!");
// 设置对象person1说话的内容Person person3 = new Person();
// 创建对象person3
person3.setJob("同学张三");
// 设置对象person3的“职称”
person3.say("到!");
// 设置对象person3说话的内容person1.say("李四!");
// 设置对象person1说话的内容Person person4 = new Person();
// 创建对象person4
person4.setJob("同学李四");
// 设置对象person4的“职称”
person4.say("Here!");
// 设置对象person4说话的内容person1.say("下次说中文。下一个!\n王五!");
// 设置对象person1说话的内容Person person5 = new Person();
// 创建对象person5
person5.setJob("同学王五");
// 设置对象person5的“职称”
person5.say("....");
// 设置对象person5说话的内容person1.say("王五!");
// 设置对象person1说话的内容person5.say("....");
// 设置对象person5说话的内容throw new Exception("抛出异常:老师在点名册上记下了“王五旷课”!!!");
// 抛出异常
} catch (Exception e) {
// catch块
System.out.println(e.getMessage());
// 输出异常的信息
} finally {System.out.println("老师:今天点名到此结束。现在开始上课!");
// 控制台输出
}
}
}
第二题
当某种商品的价格过高时,国家会对这种商品采取宏观调控,进而使得这种商品的价格趋于稳定。编写一个程序,规定西红柿单价不得超过7元,超过7元的情况作为异常抛出,运行结果如图所示。
文章图片
import java.util.Scanner;
class PriceException extends Exception {
// 自定义价格异常类,并继承异常类
public PriceException(String message) {super(message);
// 调用异常类的有参构造方法
}
}
public class Tomato {private double price;
public double getPrice() {return price;
}// 设置西红柿单价,如果产生价格异常,那么就抛出价格异常
public void setPrice(double price) throws PriceException {if (price > 7.0) {throw new PriceException("国家规定西红柿单价不得超过7元!!!");
} else {this.price = price;
// 为西红柿类的price属性赋值
}
}
public static void main(String[] args) {Scanner sc = new Scanner(System.in);
System.out.println("今天的西红柿单价(单价格式为“3.00”):");
String dayPrice = sc.next();
// 把控制台输入的西红柿单价赋值给变量dayPrice
if (dayPrice.length() == 4) {
// 控制台输入的字符串长度为4时
// 将String类型的西红柿单价转换为double类型
double unitPriceDou = Double.parseDouble(dayPrice);
Tomato tomato = new Tomato();
try {
// 把可能产生异常的Java代码放在try中
tomato.setPrice(unitPriceDou);
// 西红柿对象调用设置西红柿单价的方法
} catch (Exception e) {
// 捕捉数组元素下标越界异常对象
System.out.println(e.getMessage());
} finally {sc.close();
}
} else {
// 控制台输入的字符串长度不为4时
System.out.println("违规操作:" + "输入西红柿单价时小数点后须保留两位有效数字(如3.00)!");
}
}
}
第三题
通常需要通过两步来求出一个数组中元素的最大值和最小值。现使用静态内部类来实现通过一次遍历,求出一个数组中元素的最大值和最小值。
文章图片
//MaxMin.java
public class MaxMin {public static class Result {private double max;
private double min;
public Result(double max, double min) {this.max = max;
this.min = min;
}public double getMax() {return max;
}public double getMin() {return min;
}
}public static Result getResult(double[] array) {double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE;
for (double i : array) {if (i > max) {max = i;
}
if (i < min) {min = i;
}
}
return new Result(max, min);
}
}
//Test.java
public class Test {public static void main(String[] args) {double[] array = new double[5];
for (int i = 0;
i < array.length;
i++) {array[i] = 100*Math.random();
}
System.out.println("源数组:");
for (int i = 0;
i < array.length;
i++) {System.out.println(array[i]);
}
System.out.println("最大值:"+MaxMin.getResult(array).getMax());
System.out.println("最小值:"+MaxMin.getResult(array).getMin());
}
}
补充:【JAVA刷题集|刷题的狂欢-----JAVA每日三练-----第十天】感谢支持!
Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机