Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 压缩控制块_Java - Fatal编程技术网

Java 压缩控制块

Java 压缩控制块,java,Java,我想知道是否可以通过以下方式压缩我的if控制块: //HUNGER if(hungerLvl > 0){ hunger = "Peckish"; } if(hungerLvl > 50){ hunger = "Very Hungry"; } if(hungerLvl > 80) { hunger = "Starving"; } 对这样的事情: if(hungerLvl &g

我想知道是否可以通过以下方式压缩我的if控制块:

    //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不会原谅粗心的错误,您也不应该。您能详细说明您想要实现什么吗?您正在尝试合并所有错误吗条件?每个条件都需要不同的动作