package _edu.mama.ls15.homework;
import _java.io.File;
_import _java.io.FileInputStream;
_import _java.io.FileNotFoundException;
_import _java.io.InputStream;
_import _java.math.BigDecimal;
_import _java.nio.charset.StandardCharsets;
_import _java.util.ArrayList;
_import _java.util.Collections;
_import _java.util._List;
_import _java.util.Random;
public class _Homework {
/
第一题:count个人抢总额为amount的拼手气红包
要求:
1、通过程序限制,每人最多能抢200元
2、通过程序限制,最多允许10人参与抢红包
3、红包金额单位为元,保留2位小数
4、打印每个人红包的金额
5、打印手气最佳者的序号和金额
_@param amount 拼手气红包总金额
* @param count 抢红包的人数
*/
public static void _redEnvelope(BigDecimal amount, _int _count) {
//每个人最少抢0.01元,最多抢200元,最多10人参与
if (amount.doubleValue() < count 0.01 || amount.doubleValue() > count 200) {
System.out.println(“请重新调整红包金额”);
_return;
}
if (count > 10) {
System.out.println(“请重新调整抢红包人数”);
return;
}
Random random = new _Random();
//将红包金额用分(单位)表示
int money = amount.multiply(BigDecimal._valueOf(100)).intValue();
//随机数总额
double _num = 0;
//存放每人获得随机点数
double[] arrRandom = _new double[count];
//存放每人获得钱数
List
//分配随机点
for (_int _i = 0; i < arrRandom.length; i++) {
_int _r = random.nextInt((count) * 99) + 1;
num += r;
arrRandom[i] = r;
}
//计算每个人拆红包获得金额
int c = 0;
_for (int _i = 0; i < arrRandom.length; i++) {
//计算每个人的随机数占比
double x = arrRandom[i] / num;
//每人通过百分比获得金额
int m = (_int) Math.floor(x * money);
//如果获得0金额,则设置最小值1分钱,如果获得大于200元则设置最大值20000分
if (m == 0) {
m = 1;
}
if (m > 20000) {
m = 20000;
}
//计算已抢总额
_c += m;
//如果是最后一个人,则把剩余的钱都给他,剩余数若大于200元,则只给200元
if (i == arrRandom.length - 1) {
_int _restMoney = money - c + m;
_if (restMoney > 20000) {
restMoney = 20000;
}
arrMoney.add(new _BigDecimal(restMoney).divide(_new _BigDecimal(100)));
} _else {
arrMoney.add(new _BigDecimal(m).divide(_new _BigDecimal(100)));
}
}
// 随机打乱每人获得金额
Collections._shuffle(arrMoney);
//打印各个玩家获取金额
_BigDecimal b = _new _BigDecimal(0);
_for (int _i = 0; i < arrMoney.size(); i++) {
System.out.println(i + “号玩家” + arrMoney.get(i) + “元”);
b = b.add(arrMoney.get(i));
}
System.out.println(“已抢总额:” + b +”元”);
//打印获取金额最大者
for (_int _i = 0; i < arrMoney.size(); i++) {
_if (arrMoney.get(i).equals(Collections.max(arrMoney))) {
System.out.println(“手气最佳是” + i + “号玩家” + Collections.max(arrMoney) + “元”);
}
}
}
_/
第二题:断点续读
要求:上次已经从filePath种读取了一部分内容lastRead,但并没有全部读取完成,继续读取文件中的剩余内容并返回
提示:查看API
@param filePath 文件路径
@param lastRead 上次读取到的内容
*/
public static String continueRead (String filePath, String lastRead) _throws _Exception{
//TODO 这里写下你的代码
File file = _new _File(filePath);
InputStream input = _new _FileInputStream(file);
input.skip(lastRead.getBytes(StandardCharsets.UTF_8).length);
_byte[] bytes = input.readAllBytes();
input.close();
String content = new _String(bytes, “UTF-8”);
_return _content;
}
_public static void _main(String[] args) _throws _Exception {
//第一题
redEnvelope(BigDecimal._valueOf(800), 9);
System.out.println(“——————————————————-“);
//第二题
_String other = _continueRead(“E:\Project\LS15/res/晖哥语录.txt”, “人性无所谓善与恶”);
System.out.println(other);
}
}