刷题的狂欢-----JAVA每日三练-----第十天
Posted 敲代码的xiaolang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题的狂欢-----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());
}
}
补充:
Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值。
感谢支持!
以上是关于刷题的狂欢-----JAVA每日三练-----第十天的主要内容,如果未能解决你的问题,请参考以下文章