JAVA刷题集|刷题的狂欢-----JAVA每日三练-----第十二天
努力刷题,每日三题,题目来源于《Java课后实战训练手册》----清华大学出版社。
第一题
把A地设为坐标原点,B地的坐标为(3.8,4.2),C地的坐标为(3.2,4.5),在不计算出结果的前提下,使用Math.min()方法输出B、C哪一个地点距A地更近。
public class CloserPlace { public static void main(String[] args) {double BToA = Math.sqrt(Math.pow(3.8, 2) + Math.pow(4.2, 2));
double CToA = Math.sqrt(Math.pow(3.2, 2) + Math.pow(4.5, 2));
double result = Math.min(BToA, CToA);
if (BToA == result)
System.out.println("B点距离A点更近");
if (CToA == result)
System.out.println("C点距离A点更近");
}
}
第二题
使用Random类模拟微信的抢红包功能,根据用户输入的红包额度和个数随机生成每个红包的金额,效果图如下图所示。
文章图片
//标答参考代码
import java.util.Random;
import java.util.Scanner;
public class RedBags {
// 创建一个RedBags类
public static void main(String[] args) {System.out.println("—————————模拟微信抢红包—————————\n");
Scanner sc = new Scanner(System.in);
// 控制台输入
System.out.print("请输入要装入红包的总金额(元):");
double total = sc.nextDouble();
// 输入“红包的总金额”
System.out.print("请输入红包的个数(个):");
int bagsnum = sc.nextInt();
// 输入“红包的个数”
double min = 0.01;
// 初始化“红包的最小金额”
Random random = new Random();
// 创建随机数对象random
if (total / bagsnum == 0.01) {
// 红包总金额与个数的商为0.01时
for (int i = 1;
i < bagsnum;
i++) {double money = min;
// 让每个包中的金额均为最小金额0.01
total -= money;
// 红包中的剩余金额
System.out.println
("第" + i + "个红包:" + String.format("%.2f", money) + "元");
}
} else if (total / bagsnum < 0.01) {
// 红包总金额与个数的商小于0.01时
System.out.println("要保证每个人都能分到1分钱哦!");
return;
// 不再执行第22行以下的代码,例如第46行
} else {for (int i = 1;
i < bagsnum;
i++) {
// 设置“循环”
/*
* 本次红包可用最大金额 =
* 可分配金额 - (红包总数 * 已发出的红包数) * 红包的最小金额
*/
double max = total - (bagsnum - i) * min;
double bound = max - min;
// 设置随机金额的取值范围
/*
* 据随机金额的取值范围,随机生成红包金额。 由于nextInt(int
* bound)只能用整型做参数,所以先将bound乘100(小数点向右挪两位)
* 获取到一个整数后,将这个整数除100(小数点向左挪两位)
* 并转换成与金额相同的浮点类型
*/
double safe = (double) random.nextInt((int) (bound * 100)) / 100;
double money = safe + min;
// 最后加上红包的最小金额,以防safe出现0值
total = total - money;
// 替换total的值
System.out.println
("第" + i + "个红包:" + String.format("%.2f", money) + "元");
}
}
// 输出剩余金额
System.out.println
("第" + bagsnum + "个红包:" + String.format("%.2f", total) + "元");
sc.close();
// 关闭控制台输入
}
}
第三题
七星彩是指从0000000-9999999中选择任意7位自然号码进行投注,每注2元RMB。使用Random类模拟根据用户控制台输入的“购买的彩票数”,随机为用户生成相应数目的七星彩号码,并与当期的七星彩结果比较,最后输出中奖情况,效果图如下图所示。
文章图片
//标答参考答案
import java.util.Random;
import java.util.Scanner;
public class SevenColors {
// 创建一个SevenColors类
public static void main(String[] args) {Scanner sc = new Scanner(System.in);
// 控制台输入
System.out.print("请输入您要购买的彩票数:");
// 提示信息
int counts = sc.nextInt();
// 输入“购买的彩票数”
Random rnd = new Random();
// 创建随机号码对象r
int nums[] = new int[counts];
// 声明一个int类型“购买彩票”的数组,用来存放购买的彩票号码
System.out.println("您购买的彩票号码如下:");
// 提示信息
for (int i = 0;
i < counts;
i++) {
// 遍历“购买彩票”的数组
int randNum = rnd.nextInt(8999999) + 1000000;
// 7位彩票号码,范围是1000000~9999999
System.out.println(randNum);
// 输出随机生成的彩票号码
nums[i] = randNum;
// 把随机生成的彩票号码插入“购买彩票”的数组
}
int useMoney = nums.length * 2;
// 购买彩票花费的金额
System.out.println("您购买彩票的号码量:" + counts + "张,共消费:" + useMoney + "元。");
// 输出结果
int getMoney = 0;
// 初始化“中奖金额”
int bonus = rnd.nextInt(8999999) + 1000000;
// 7位“开奖号码”,范围是1000000~9999999
System.out.println("本期开奖号 : " + bonus);
String rightNum = Integer.toString(bonus);
// 类型转换
for (int l = 0;
l < nums.length;
l++) {
// 遍历由购买彩票组成的数组
String myNum = Integer.toString(nums[l]);
// 彩票号码
int series = 0;
// 初始化中“我的号码”跟开奖号一样的连续号码的组数
int arr[] = new int[7];
// 声明一个int类型的数组,用来存放跟开奖号一样的连续号码的组数
for (int m = 0;
m < 7;
m++) {
// 7位号码
String everyNum = myNum.substring(m, m + 1);
// 分别截取“我的号码”每一位上的字符串
String everyRightNum = rightNum.substring(m, m + 1);
// 分别截取“开奖号”每一位上的字符串
if (everyNum.equals(everyRightNum)) {
// 判断“我的号码”跟“开奖号”每位上的号码字是否相同
series++;
// 条件成立时,统计“我的号码”跟开奖号一样的连续号码的组数
} else {
// 条件不成立时
if (series > 0) {
// 如果有中奖的号码
arr[series - 1] = series;
// 把中奖的号码插入号码组
series = 0;
// 初始化中“我的号码”跟开奖号一样的连续号码的组数
}
}
}
// 求最大的连续号码的组数
for (int i = 0;
i < arr.length;
i++) {if (series < arr[i]) {series = arr[i];
}
}
if (series > 1) {
// 连续号码的组数大于1
switch (series) {
// 多分支语句
case 2:
System.out.println("您赢得了5元!");
getMoney += 5;
// 六等奖5元
break;
case 3:
System.out.println("您赢得了20元!");
getMoney += 20;
// 五等奖20元
break;
case 4:
System.out.println("您赢得了300元!");
getMoney += 300;
// 四等奖300元
break;
case 5:
System.out.println("您赢得了1800元!");
getMoney += 1800;
// 三等奖1800元
break;
case 6:
System.out.println("您赢得了20000元!");
getMoney += 20000;
// 二等奖20000元
break;
case 7:
System.out.println("您赢得了5000000元!");
getMoney += 5000000;
// 一等奖5000000元
break;
}
}
}
System.out.println("您中奖的总金额:" + getMoney + "元。");
// 总奖金
sc.close();
// 关闭控制台输入
}
}
【JAVA刷题集|刷题的狂欢-----JAVA每日三练-----第十二天】后两个题没有想法,把标答附在这里了,如果大家有更好的想法欢迎留言。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机