Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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_Android - Fatal编程技术网

Java 如何使用带字符串的开关

Java 如何使用带字符串的开关,java,android,Java,Android,我有下面的代码,我写的是为了摆脱一大堆if-then-else语句。唯一的问题是,我刚刚发现Switch语句不能与字符串一起使用 这有什么窍门吗 谢谢 switch(xpp.getName()) { case("creature") : attribID = Integer.parseInt(xpp.getAttributeValue(0)); case("name") : elName = xpp.getName(); break;

我有下面的代码,我写的是为了摆脱一大堆if-then-else语句。唯一的问题是,我刚刚发现Switch语句不能与字符串一起使用

这有什么窍门吗

谢谢

switch(xpp.getName()) {
            case("creature") : attribID = Integer.parseInt(xpp.getAttributeValue(0));
            case("name") : elName = xpp.getName(); break;
            case("race") : elName = xpp.getName(); break;
            case("gender") : elName = xpp.getName(); break;
            case("alignment") : elName = xpp.getName(); break;
            case("age") : elName = xpp.getName(); break;
            case("condition") : elName = xpp.getName(); break;
            case("skinColor") : elName = xpp.getName(); break;
            case("hairColor") : elName = xpp.getName(); break;
            case("size") : elName = xpp.getName(); break;
            case("height") : elName = xpp.getName(); break;
            case("weight") : elName = xpp.getName(); break;
            case("hitPoints") : elName = xpp.getName(); break;
            case("armorClass") : elName = xpp.getName(); break;
            case("actionPoints") : elName = xpp.getName(); break;
            case("magicPoints") : elName = xpp.getName(); break;
            case("strength") : elName = xpp.getName(); break;
            case("dexterity") : elName = xpp.getName(); break;
            case("intelligence") : elName = xpp.getName(); break;
            case("weapon") : elName = xpp.getName(); break;
            case("armor") : elName = xpp.getName(); break;
            case("magicItem") : elName = xpp.getName(); break;
            case("attackSpell") : elName = xpp.getName(); break;
            case("defenseSpell") : elName = xpp.getName(); break;
            case("item1") : elName = xpp.getName(); break;
            case("item2") : elName = xpp.getName(); break;
        }

字符串开关仅适用于Java 7。因此,您需要使用Java7SDK来编译代码


但是,如果您将Eclipse用作开发Android应用程序的IDE,则无法将Android项目的代码遵从性级别设置为Java7。然后,您必须等待android人员支持java 7,或者使用IntelliJ,或者使用java 7 sdk从命令行编译代码,然后使用dex编译器

字符串开关仅适用于Java 7。因此,您需要使用Java7SDK来编译代码


但是,如果您将Eclipse用作开发Android应用程序的IDE,则无法将Android项目的代码遵从性级别设置为Java7。然后,您必须等待android人员支持java 7,或者使用IntelliJ,或者使用java 7 sdk从命令行编译代码,然后使用dex编译器

Java7支持打开字符串,但它不适用于android

我建议使用枚举。创建一个枚举类,并将枚举命名为所需的字符串。然后可以确定给定字符串的枚举并打开它

下面是一个例子:

Number.java

public enum Number { one, two, three }
public class Switcher {
    public static void main(String[] args) {
        String input = "one";
        switch (Number.valueOf(input)) {   // <- that's the magic!
        case one:System.out.println("1");break;
        case two:System.out.println("2");break;
        case three:System.out.println("3");break;
        }
    }
}
Switcher.java

public enum Number { one, two, three }
public class Switcher {
    public static void main(String[] args) {
        String input = "one";
        switch (Number.valueOf(input)) {   // <- that's the magic!
        case one:System.out.println("1");break;
        case two:System.out.println("2");break;
        case three:System.out.println("3");break;
        }
    }
}
公共类切换器{
公共静态void main(字符串[]args){
字符串输入=“一”;

switch(Number.valueOf(input)){/Java7支持在字符串上切换,但它不适用于android

我建议使用枚举。创建一个枚举类,并将枚举命名为期望的字符串。然后可以确定给定字符串的枚举并打开它

下面是一个例子:

Number.java

public enum Number { one, two, three }
public class Switcher {
    public static void main(String[] args) {
        String input = "one";
        switch (Number.valueOf(input)) {   // <- that's the magic!
        case one:System.out.println("1");break;
        case two:System.out.println("2");break;
        case three:System.out.println("3");break;
        }
    }
}
Switcher.java

public enum Number { one, two, three }
public class Switcher {
    public static void main(String[] args) {
        String input = "one";
        switch (Number.valueOf(input)) {   // <- that's the magic!
        case one:System.out.println("1");break;
        case two:System.out.println("2");break;
        case three:System.out.println("3");break;
        }
    }
}
公共类切换器{
公共静态void main(字符串[]args){
字符串输入=“一”;

switch(Number.valueOf(input)){/作为替代,如果您不能直接切换到Java 7,最简单的方法是用一堆
if-else
替换switch语句。或者,您可以尝试切换字符串的hashCode,但我只建议您确保没有冲突(hashCode())不保证能防止冲突!)。最清晰、最简单的解决方案是使用
if-else
。它保持可读性,并允许您仍然支持旧版本的Java

编辑:只有一个案例有不同之处!为什么不简单地做:

if (xpp.getName().equals("creature") {
    attribID = Integer.parseInt(xpp.getAttributeValue(0));
} else {
    elname = xpp.getName();
}

另一种选择是,如果您不能直接切换到Java 7,最简单的方法是用一堆
if else
替换switch语句。或者,您可以尝试切换字符串的hashCode,但我只建议您确保没有冲突(hashCode()不能保证防止冲突!)。最清晰、最简单的解决方案是使用
if-else
。它保持可读性,并允许您仍然支持旧版本的Java

编辑:只有一个案例有不同之处!为什么不简单地做:

if (xpp.getName().equals("creature") {
    attribID = Integer.parseInt(xpp.getAttributeValue(0));
} else {
    elname = xpp.getName();
}

重新思考你的设计。让它更面向对象。也许可以使用匿名类,或者某种分派表。或者只是简化它。看起来似乎只有两种选择(“生物”做一件事,其他任何东西都做另一件事)。难以维护的代码是重构的主要候选代码。

重新思考您的设计。使其更面向对象。可能使用匿名类或某种分派表。或者只是简化它。看起来似乎只有两种选择(“生物”做一件事,其他任何东西都做另一件事)。难以维护的代码是重构的主要候选对象。

对于所有情况,您都在做同样的事情,除了xpp.getName()是“生物”。这意味着您的所有代码都可以轻松转换为单个if语句

if ( xpp.getName().equal("creature"))
     attribID = Integer.parseInt(xpp.getAttributeValue(0));
else
     elName = xpp.getName();

看起来你应该开始编写更多面向对象的程序,并创建一些类,而不是使用名称来确定对象是什么

对于所有情况,你都在做同样的事情,除了xpp.getName()是“生物”。这意味着你所有的代码都可以很容易地转换成一个单独的if语句

if ( xpp.getName().equal("creature"))
     attribID = Integer.parseInt(xpp.getAttributeValue(0));
else
     elName = xpp.getName();

看起来您还应该开始编写更面向对象的程序,并创建一些类,而不是使用名称来确定对象是什么

是的,使用支持切换字符串的JDK(即Java 7).duplicate-这只是一个伪代码,对吗?如果不是,这个case语句看起来很可笑。上面的语句看起来应该是一个if-else语句。@mre Android不支持Java 7。@Eng.Fouad,啊,我不知道。:DYeah,使用支持打开字符串的JDK(即Java 7).duplicate-这只是一个伪代码,对吗?如果不是,这个case语句看起来很可笑。上面的语句看起来应该是一个if-else语句。@mre Android不支持Java 7。@Eng.Fouad,啊,我不知道。:D