Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Core_Local - Fatal编程技术网

Java 作用域局部变量和条件的问题

Java 作用域局部变量和条件的问题,java,variables,core,local,Java,Variables,Core,Local,我正在尝试构造返回布尔值的方法: public boolean isStringValid(String s){ boolean isValid; String temp = null; // only combinations of 'A','B','C' are allowed for (int i = 0; i < s.length(); i++) { temp = s.substring(i, i+1);

我正在尝试构造返回布尔值的方法:

public boolean isStringValid(String s){
    boolean isValid;
    String temp = null;     
    // only combinations of 'A','B','C' are allowed
    for (int i = 0; i < s.length(); i++)
    {
        temp = s.substring(i, i+1);
        if (temp.equals("A")|temp.equals("B")|temp.equals("C")){
            isValid= true;
        }else{
            isValid= false;
        }
    }   
    return isValid;
}
public boolean isStringValid(字符串s){
布尔值是有效的;
字符串temp=null;
//仅允许“A”、“B”、“C”的组合
对于(int i=0;i
但是我得到一个编译器错误,说“局部变量isValid可能没有初始化”

我试图做的是获取一个字符串并检查它的每个字母,如果在字符串中找到除a、B或C以外的任何字母,isStringValid方法应该返回false。只有在检查每个字母并发现其为A、B或C之后,该方法才能返回true

我想我很难计算出局部变量的范围。该方法从if/else块中返回的适当方式是什么?如果这是不可能的,你会推荐什么是最好的设计方法

谢谢你的舞蹈
最亲切的问候

也许for实际上可能不会循环。所以isValid没有设置。

也许for实际上可能没有循环。所以没有设置isValid。

如果得到一个空字符串作为参数,会发生什么

编译器需要确保您总是返回一些内容。用false初始化isValid变量,这样,如果该方法得到一个空字符串,它将只返回默认值

在Java中,不能返回未初始化的变量,只需确保在所有可能的流中,该变量都设置了任何值


更新:这将解决您的问题,但我建议您查看下面的答案,因为您的方法的逻辑不正确

如果将空字符串作为参数,会发生什么

编译器需要确保您总是返回一些内容。用false初始化isValid变量,这样,如果该方法得到一个空字符串,它将只返回默认值

在Java中,不能返回未初始化的变量,只需确保在所有可能的流中,该变量都设置了任何值

更新:这将解决您的问题,但我建议您查看下面的答案,因为您的方法的逻辑不正确

该方法是错误的(除了Victor解释的编译器错误)。如果最后一个字母是C,其他所有字母都是D,则返回true。此外,还应该使用char,并且需要两个条(| |)来表示逻辑or。尝试:

public boolean isStringValid(String s){             
            // only combinations of 'A','B','C' are allowed
            for (int i = 0; i < s.length(); i++)
            {
                    char tempChar = s.charAt(i);
                    if (!(tempChar == 'A' 
                       || tempChar == 'B' 
                       || tempChar == 'C'))
                        return false;
            }       
            return true;
}
方法是错误的(除了Victor解释的编译器错误)。如果最后一个字母是C,其他所有字母都是D,则返回true。此外,还应该使用char,并且需要两个条(| |)来表示逻辑or。尝试:

public boolean isStringValid(String s){             
            // only combinations of 'A','B','C' are allowed
            for (int i = 0; i < s.length(); i++)
            {
                    char tempChar = s.charAt(i);
                    if (!(tempChar == 'A' 
                       || tempChar == 'B' 
                       || tempChar == 'C'))
                        return false;
            }       
            return true;
}

变量
是有效的
是局部变量。在Java语言规范中:

局部变量(§14.4,§14.13)必须 在其前面显式给定一个值 通过初始化或 (§14.4)或转让(§15.26),在 可以由 编译器使用的规则是确定的 任务

参见Java语言规范中的第4.5.5节变量初始值:

将变量初始化为false以开始,然后仅在方法的正确部分将其设置为true,即:

if (temp.equals("A")|temp.equals("B")|temp.equals("C")){
   isValid = true;
}

删除else语句,让方法正常返回。

变量
是有效的
是局部变量。在Java语言规范中:

局部变量(§14.4,§14.13)必须 在其前面显式给定一个值 通过初始化或 (§14.4)或转让(§15.26),在 可以由 编译器使用的规则是确定的 任务

参见Java语言规范中的第4.5.5节变量初始值:

将变量初始化为false以开始,然后仅在方法的正确部分将其设置为true,即:

if (temp.equals("A")|temp.equals("B")|temp.equals("C")){
   isValid = true;
}

删除else语句,让方法正常返回。

我同意应该初始化isValid布尔变量的答案

但是,您可以使用一个

[abc]表示您正在检查s是否包含“a”、“b”或“c”字符

[^abc]表示您正在检查s是否包含不属于“a”、“b”或“c”的字符

[^abc]+表示您正在检查s是否至少包含一个不属于“a”、“b”或“c”的字符


$^表示空字符串

我同意应该初始化isValid布尔变量的答案

但是,您可以使用一个

[abc]表示您正在检查s是否包含“a”、“b”或“c”字符

[^abc]表示您正在检查s是否包含不属于“a”、“b”或“c”的字符

[^abc]+表示您正在检查s是否至少包含一个不属于“a”、“b”或“c”的字符


$^表示空字符串

请注意,根据字符串中的最后一个字符,循环将只返回true或false。你想做的是

public boolean isStringValid(String s) {
  for (char c : s.toCharArray()) {
    if (!('A' == c || 'B' == c || 'C' == c)) { 
      return false;
    }
  }       
  return true;
}

请注意,根据字符串中的最后一个字符,循环将只返回true或false。你想做的是

public boolean isStringValid(String s) {
  for (char c : s.toCharArray()) {
    if (!('A' == c || 'B' == c || 'C' == c)) { 
      return false;
    }
  }       
  return true;
}

IMO-s是一个糟糕的变量名,请更改其原始代码作为建议,当对常数使用equals时,试着在常数对象上调用它:例如:“a”。equals(temp);这样,如果temp为null,则不会得到NullPointerException,而equals将产生false。@Tom:由于temp变量来自substring方法,因此此处不能为null。在其他情况下,是的,这样做很有用。IMO-s是一个糟糕的变量名,请更改它在原始代码中的位置作为建议,当对常量使用equals时,尝试调用它