Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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_String - Fatal编程技术网

对拒绝合作的Java代码进行故障排除

对拒绝合作的Java代码进行故障排除,java,string,Java,String,名为“code”的字符串似乎无法读取。为什么会这样?我该如何修复它 我的代码(导致问题的代码段): 字符串代码; 对于(int z=0;z如果x为零,code会有什么值?答案是它根本没有值(甚至不是null)。如果愿意,您可以将其初始化为空字符串: String code = ""; 您已经创建了一个引用,但从未对其进行过初始化。请将第一行更改为来初始化code String code = "" Edit:Zavior指出,您可以从缓存中提取初始化的字符串,而不是为新字符串分配空间 但是,为

名为“code”的字符串似乎无法读取。为什么会这样?我该如何修复它

我的代码(导致问题的代码段):

字符串代码;

对于(int z=0;z如果
x
为零,
code
会有什么值?答案是它根本没有值(甚至不是
null
)。如果愿意,您可以将其初始化为空字符串:

String code = "";

您已经创建了一个引用,但从未对其进行过初始化。请将第一行更改为来初始化
code

String code = ""
Edit:Zavior指出,您可以从缓存中提取初始化的字符串,而不是为新字符串分配空间


但是,为什么要将temp赋值给code,然后将code赋值给temp加上其他值呢?它可以设置为
code=code+ca

Java要求在使用每个变量的值之前对其进行初始化。在本例中,有一种相当明显的情况,即在赋值之前使用该变量。Java语言规范(JLS)不允许这样做。(如果这样做,程序的行为将是不可预测的,包括……潜在的……JVM崩溃。)

在其他情况下,编译器会抱怨实际上所讨论的变量总是被初始化(或者看起来是这样),而不是“理解”您的代码,或试图推导初始化的逻辑证明,编译器遵循指定的过程来确定变量是否已明确赋值。此过程本质上是保守的,它给出的答案是“它已初始化”或“它可能未初始化”。因此,编辑错误消息的措辞

下面是一个编译器会抱怨的示例,即使“很明显”变量在使用前已初始化:

boolean panic;
for (int i = 0; i < 10; i += 2) {
    if (i % 2 == 1 && panic) { // compilation error here
        System.out.println("Panic!!");
    }
}
布尔恐慌;
对于(int i=0;i<10;i+=2){
如果(i%2==1&&panic){//这里有编译错误
System.out.println(“Panic!!”);
}
}

明确的赋值规则(在JLS中指定)规定,
panic
在指定的点上没有明确初始化。对于理解形式化方法基本知识的人来说,证明
i%2==1
将始终是
false
,这是一件简单的事情。但是,编译器不能。(即使可能,根据JLS规则,代码仍然存在错误。)

乍一看,您的第一个循环将不起作用。您正在将
0
添加到
z
中。除非您没有向我们显示有关“code”的内容,否则错误看起来是不言自明的。是的,我知道z+0不起任何作用。但是,在循环的后面,我降低了X。第一个循环也与任何输入字符串无关。@azulflame do对于输入字符串中的每个字符,可以降低x,因为可以通过将z的条件设置为小于string.length.
for(int z;z
这是一个片段,不是整个程序,但我想我明白你的意思了。请给我一点时间来测试一下。谢谢,只是你提到的“x”让我很困惑。我正在程序的其他地方使用它(int x=str.length();)为什么我不能对我自己的问题的答案投上一票?你应该被允许,即使你没有15个代表同意,堆栈溢出?我指的是
x
,因为你有条件
z=0
x@KirkWoll他只有不到15个声誉,不能投上一票。但他可以接受。因为我做事迂回s(有时我只是不希望人们理解整个程序)而不是使用String code=new String(),只需使用String code=“”;
String code = ""
boolean panic;
for (int i = 0; i < 10; i += 2) {
    if (i % 2 == 1 && panic) { // compilation error here
        System.out.println("Panic!!");
    }
}