1、用while ,for , switch 三种方法分别将最初代码进行循环的优化,以及把价格整数优化为价格两位小数
2、用格式化的方法将把Math.random()*1000+1000变成临时的字符串(调用String.format),字符串转化成%f,保留两位小数(%.2f)
3、将tmp_price转化成float类型,不同类型之间转换调用类型的大写.parse类型(Float.parseFloat)
4、循环的思路:确定好循环的条件,确定循环的次数用for,不确定循环的次数用while
循环嵌套:While循环里套用另个一个while,或者是for循环中套用另外一个for
注意:
1、不用round,因为round计算后为整数
2、小数一定加f,否则报错
- while方法
注意:while里面匹配小数,不匹配取非(!)
代码为: !tmp_user_price.matches()即为输入价格不可取括号里面的类型
以下为整段代码:
String tmp_user_price=scanner.next();
while(!tmp_user_price.matches("^[0-9]+(.[0-9]{1,2})?$")){
System.out.println("你输入的价格有问题,请检查输入价格:");
tmp_user_price=scanner.next();
}
- for的写法
把while在class字节文件中都转化成for
以下为整段代码:
for(tmp_user_price = scanner.next();
!tmp_user_price.matches("^[0-9]+(.[0-9]{1,2})?$");
tmp_user_price = scanner.next()) {
System.out.println("你输入的价格有问题,请检查输入价格:");
}
用switch循环结构:
switch(user_choice){
case "1":
String tmp_price=String.format("%.2f",Math.random()*1000+1000);
plan_price=Float.parseFloat(tmp_price);
break;
case "2":
//先定义一个临时变量,格式化字符串两位小数
tmp_price=String.format("%.2f",Math.random()*99+1);
plan_price=Float.parseFloat(tmp_price);
break;
default:
tmp_price=String.format("%.2f",Math.random()*10000);
plan_price=Float.parseFloat(tmp_price);
}
字节文件添加一个byte的中间变量
byte var6 = -1;
switch(user_choice.hashCode()) {
case 49:
if (user_choice.equals("1")) {
var6 = 0;
}
break;
case 50:
if (user_choice.equals("2")) {
var6 = 1;
}
}
给这个中间变量0和-1,然后根据中间变量做代码中的逻辑
switch(var6) {
case 0:
tmp_price = String.format("%.2f", Math.random() * 1000.0D + 1000.0D);
plan_price = Float.parseFloat(tmp_price);
break;
case 1:
tmp_price = String.format("%.2f", Math.random() * 99.0D + 1.0D);
plan_price = Float.parseFloat(tmp_price);
break;
default:
tmp_price = String.format("%.2f", Math.random() * 10000.0D);
plan_price = Float.parseFloat(tmp_price);
}
感兴趣的小伙伴可在码云Gitee 自取优化后的源代码:Java小游戏: 幸运价格猜猜猜 代码 · zyt/麦当劳投资人 - 码云 - 开源中国 (gitee.com)https://gitee.com/zytscode/mcdonalds-investors/blob/master/Java%E5%B0%8F%E6%B8%B8%E6%88%8F%EF%BC%9A%20%E5%B9%B8%E8%BF%90%E4%BB%B7%E6%A0%BC%E7%8C%9C%E7%8C%9C%E7%8C%9C%20%E4%BB%A3%E7%A0%81