Java 压缩控制块
我想知道是否可以通过以下方式压缩我的if控制块:Java 压缩控制块,java,Java,我想知道是否可以通过以下方式压缩我的if控制块: //HUNGER if(hungerLvl > 0){ hunger = "Peckish"; } if(hungerLvl > 50){ hunger = "Very Hungry"; } if(hungerLvl > 80) { hunger = "Starving"; } 对这样的事情: if(hungerLvl &g
//HUNGER
if(hungerLvl > 0){
hunger = "Peckish";
}
if(hungerLvl > 50){
hunger = "Very Hungry";
}
if(hungerLvl > 80) {
hunger = "Starving";
}
对这样的事情:
if(hungerLvl > 0; hungerLvl > 50; hungerLvl > 80) {
}
我非常喜欢使用数据结构+循环,而不是重复的代码。这就是说,这会增加有时不值得的复杂性 你发布的内容看起来很容易阅读,因此可能不值得大惊小怪。然而,如果您可能会遇到几十个或数百个条件,那么数据结构+循环将更好地为您服务 下面是一个完整的工作示例,使用相同的值。关键方法
howHunger
既不比3档示例更紧凑,也不比3档示例更可读。但是,如果您选择10或20个条件,那么这个IMHO将更易于维护和可读
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Map;
public class HowHungry {
public String howHungry(Integer hunger) {
SortedMap<Integer, String> HungerLevels = new TreeMap<>();
HungerLevels.put(0, "Peckish");
HungerLevels.put(50, "Very Hungry");
HungerLevels.put(80, "Starving");
String howHungry = null;
for (Map.Entry<Integer,String> me : HungerLevels.entrySet() ) {
if (hunger > me.getKey()) {
howHungry = me.getValue();
} else {
break;
}
}
return howHungry;
}
public static final void main(String[] args) {
HowHungry hh = new HowHungry();
System.out.println(hh.howHungry(Integer.valueOf(args[0])));
}
}
import java.util.SortedMap;
导入java.util.TreeMap;
导入java.util.Map;
公共课怎么饿{
公共字符串饥饿(整数饥饿){
SortedMap HungerLevels=新树映射();
饥饿水平。放置(0,“Peckish”);
饥饿水平。put(50,“非常饥饿”);
饥饿水平。put(80,“饥饿”);
String=null;
对于(Map.Entry me:HungerLevels.entrySet()){
if(饥饿>me.getKey()){
howHunger=me.getValue();
}否则{
打破
}
}
饥饿的返回;
}
公共静态最终void main(字符串[]args){
How饥饿hh=新的How饥饿();
System.out.println(hh.how饥饿(Integer.valueOf(args[0]));
}
}
我非常喜欢使用数据结构+循环,而不是重复的代码。这就是说,这会增加有时不值得的复杂性
你发布的内容看起来很容易阅读,因此可能不值得大惊小怪。然而,如果您可能会遇到几十个或数百个条件,那么数据结构+循环将更好地为您服务
下面是一个完整的工作示例,使用相同的值。关键方法howHunger
既不比3档示例更紧凑,也不比3档示例更可读。但是,如果您选择10或20个条件,那么这个IMHO将更易于维护和可读
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Map;
public class HowHungry {
public String howHungry(Integer hunger) {
SortedMap<Integer, String> HungerLevels = new TreeMap<>();
HungerLevels.put(0, "Peckish");
HungerLevels.put(50, "Very Hungry");
HungerLevels.put(80, "Starving");
String howHungry = null;
for (Map.Entry<Integer,String> me : HungerLevels.entrySet() ) {
if (hunger > me.getKey()) {
howHungry = me.getValue();
} else {
break;
}
}
return howHungry;
}
public static final void main(String[] args) {
HowHungry hh = new HowHungry();
System.out.println(hh.howHungry(Integer.valueOf(args[0])));
}
}
import java.util.SortedMap;
导入java.util.TreeMap;
导入java.util.Map;
公共课怎么饿{
公共字符串饥饿(整数饥饿){
SortedMap HungerLevels=新树映射();
饥饿水平。放置(0,“Peckish”);
饥饿水平。put(50,“非常饥饿”);
饥饿水平。put(80,“饥饿”);
String=null;
对于(Map.Entry me:HungerLevels.entrySet()){
if(饥饿>me.getKey()){
howHunger=me.getValue();
}否则{
打破
}
}
饥饿的返回;
}
公共静态最终void main(字符串[]args){
How饥饿hh=新的How饥饿();
System.out.println(hh.how饥饿(Integer.valueOf(args[0]));
}
}
除了简单的“如果”之外,还有其他一些方法,但大多数方法仍然在幕后使用它(例如,如果你愿意,你可以使用谷歌),但在你的情况下,这只会过于复杂,你必须编写更多、可读性更低的代码。
因此,我认为在这种特殊情况下,“如果”语句才是正确的选择
如果您关心速度,那么您可能应该查看您执行变量赋值的次数(如果您经常检查hungerLvl,这可能很重要):
在您的代码中,无论前面的值检查结果如何,都会执行每个值检查。因此,如果hungerLvl等于例如92,那么首先检查hungerLvl>0是否会发生,然后饥饿将被赋值为“Peckish”,然后它将检查下一个if语句,进行下一次赋值,直到最后检查最大值并进行最终赋值。
所以你有三个作业,而不是最后一个
为了防止出现这种情况,您可以使用“if-else”块并稍微更改逻辑表达式(我假设hungerLvl不能低于0-如果可以,并且会产生一些差异,您必须在下面添加额外的检查):
如果(hungerLvl除了普通的“如果”之外,还有其他一些方法,但大多数方法仍然在幕后使用它(如果你喜欢,比如谷歌),但是在你的情况下,它只会过于复杂,你必须编写更多、可读性更低的代码。 因此,我认为在这种特殊情况下,“如果”语句才是正确的选择 如果您关心速度,那么您可能应该查看您执行变量赋值的次数(如果您经常检查hungerLvl,这可能很重要): 在您的代码中,无论前面的检查结果如何,都会执行每个值检查。因此,如果hungerLvl等于例如92,则首先检查hungerLvl>0,然后将饥饿分配为“Peckish”值,然后它将检查next if语句,进行下一次赋值,只有这样它才会最终检查最大值并进行最终赋值。 所以你有三个作业,而不是最后一个 为了防止出现这种情况,您可以使用“if-else”块并稍微更改逻辑表达式(我假设hungerLvl不能低于0-如果可以,并且会产生一些差异,您必须在下面添加额外的检查):
if(hungerLvl你可以这样写:
hunger = hungerLvl > 80 ? "Starving"
: hungerLvl > 50 ? "Very Hungry"
: hungerLvl > 0 ? "Peckish"
: hunger; // or null, or whatever
你可以这样写:
hunger = hungerLvl > 80 ? "Starving"
: hungerLvl > 50 ? "Very Hungry"
: hungerLvl > 0 ? "Peckish"
: hunger; // or null, or whatever
关于,“我想知道是否可以压缩我的if循环…”
请注意,您发布的代码中没有一个循环。如果块是控制块,则不是循环。是的,我很迂腐,但我明白编程是一项精确性练习,Java编译器和JVM不会原谅粗心的错误,您也不应该。您能详细说明您想要实现什么吗?您正在尝试合并所有错误吗条件?每个条件都需要不同的动作