刷题的狂欢-----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每日三练-----第十天的主要内容,如果未能解决你的问题,请参考以下文章

刷题的狂欢-----JAVA每日三练-----第十六天

刷题的狂欢-----JAVA每日三练-----第十五天

刷题的狂欢-----JAVA每日三练-----第十三天

刷题的狂欢-----JAVA每日三练-----第十二天

刷题的狂欢-----JAVA每日三练-----第十七天

刷题的狂欢-----JAVA每日三练-----第七天