Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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,我有下面的代码,返回的代码让我很困惑。我是java新手,不太清楚它为什么会恢复原样。任何帮助都会很好 当数据具有PE846和A846时,它返回engine、ambo和engineambo。我只想返回engineambo String soundString = ""; if (data.contains("PE846")) { soundString += "engine"; betaString = "Engine : "; s

我有下面的代码,返回的代码让我很困惑。我是java新手,不太清楚它为什么会恢复原样。任何帮助都会很好

当数据具有
PE846
A846
时,它返回
engine
ambo
engineambo
。我只想返回
engineambo

    String soundString = "";

    if (data.contains("PE846")) {
        soundString += "engine";
        betaString = "Engine : ";
        sign = engine;
    }
    if (data.contains("A846")) {
        soundString += "ambo";
        betaString += "Ambo : ";
        sign = ambo;
    }
    if (data.contains("MD846")) {
        soundString += "medic";
        betaString += "Medic";
        sign = medic;
    }

    log.info(betaString + " Alerted");

    {
        new AudioPlayer("sounds/" + soundString + ".wav").start();
        log.info(soundString);
    }   

如果您的数据包含PE846-A846,那么它只包含PE、A和PE&&A。您应该首先在一个If语句中检查PE&&A,如果失败,则分别检查它们。您可以尝试逐行跟踪代码。如果它包含PE846和A846(但不是MD846),则它将运行前两个条件块,从而执行如下操作:

if (data.contains("PE846")){   // The string does contain PE846, per your question
    soundString += "engine";   // soundString = "" + "engine" = "engine"
    betaString = "Engine : ";  // betaString = "Engine : "
    sign = engine;             // sign = engine
}
if (data.contains("A846")){    // The string does contain A846, per your question
    soundString += "ambo";     // soundString = "engine" + "ambo"
    betaString += "Ambo : ";   // betaString = "Engine : " + "Ambo : " = "Engine : Ambo : "
    sign = ambo;               // sign = ambo (overwriting the previous value, "engine")
}
if (data.contains("MD846")){   // The string does not contain MD846, per your question
    soundString += "medic";    // not executed
    betaString += "Medic";     // not executed
    sign = medic;              // not executed
}

log.info(betaString + " Alerted");  // betaString + " Alerted" => "Engine : Ambo : Alerted"
{
    new AudioPlayer("sounds/"+ soundString +".wav").start();
    log.info(soundString);          // soundString => "engineambo"
} 

尝试重写代码,使其不包含经常被重新分配的变量。
final
关键字将阻止变量的第二次赋值,这样就不需要检查整个程序流程,以查看以前的赋值是否对以后的赋值有影响。此外,避免使用
+=
,除非您确实想向现有数据添加数据

此外,如果您将某个值设置为“正确值”,如果其他值不可能,则不要继续更改它

差不多

String mystring;

if (data.contains("MD846")) {
  mystring = "medic";
} else if (data.contains("A846")) {
  mystring = "ambo";
}

无法仅因为数据被设置为“MD846A846”而将mystring设置为“medicambo”。

方法
包含的
不适合查找子字符串,因为它使用
CharSequence
对象,而不是
字符串
对象


在这种情况下,最好的选择是替换类字符串中
indexOf
contains
方法。

您的代码示例甚至不包括返回值。您指的是soundString的内容?返回3个元素是什么意思?一个方法不能返回多个。请解释一下。我想他指的是带有“returns”的日志输出。我们还需要知道其他代码吗?您是否可以包括完整的函数,特别是返回字符串的位。。。