为什么我必须初始化变量?

时间:2020-02-16 13:26:13

标签: java arrays initialization boolean

我的代码正在检查给定的字符串是否采用某种格式。字符串的第一个字符必须是大写字母,其余部分必须是从1到给定维的任何数字。

如果字符串的第一个字符包含字母数组中的字符串,则代码将检查字符串的其余部分是否包含数字数组中的数字。要成为有效坐标,两个条件都必须为真,如果其中一个为假,则不是有效坐标。我想返回布尔值isValidCoordinate,但是IntelliJ告诉我我必须初始化isValid坐标。为什么我必须初始化它,布尔表达式取决于'if'条件。

谢谢。

public static boolean validCoordinate(String coordinate, int dimension) {
        boolean isValidCoordinate;
        String [] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        int [] numbers = new int [dimension];
        int one = 1;
        for(int i = 0; i < dimension; i++){
            numbers[i] = one + i;
        }
        for(int i = 0; i < dimension; i++){
            if((Character.toString(coordinate.charAt(0))).contains(alphabet[i])) {
                for(int j = 0; j < dimension; j++) {
                    if ((coordinate.substring(1)).contains(Integer.toString(numbers[j]))) {
                        isValidCoordinate = true;
                    }
                    else {
                        isValidCoordinate = false;
                    }
                }

            }
            else {
                isValidCoordinate = false;
            }

        }

        return isValidCoordinate;
    }

这是我的最终代码:

public static boolean validCoordinate(String coordinate, int dimension) {
        boolean isValidCoordinate;
        String [] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        int [] numbers = new int [dimension];
        int one = 1;
        for(int i = 0; i < dimension; i++){
            numbers[i] = one + i;
        }
        for(int i = 0; i < dimension; i++){
            if((Character.toString(coordinate.charAt(0))).contains(alphabet[i])) {
                for(int j = 0; j < dimension; j++) {
                    if ((coordinate.substring(1)).contains(Integer.toString(numbers[j]))) {
                        isValidCoordinate = true;
                    }
                    else {
                        isValidCoordinate = false;
                    }
                }

            }
            else {
                isValidCoordinate = false;
            }

        }

        return true;
    }

3 个答案:

答案 0 :(得分:3)

涵盖了for循环内的所有情况,但没有涵盖dimension为0的情况。

该方法将直接转到return isValidCoordinate;,该变量尚未初始化。

答案 1 :(得分:2)

有可能永远不会输入for循环(例如,如果dimension == 0)。在这种情况下,您将永远不会为isValidCoordinate分配值,但是您将尝试在方法的最后一条语句中返回该变量的值。

在这种情况下isValidCoordinate的值是什么?

它没有任何价值。

因此,编译器强迫您为isValidCoordinate分配一个初始值,以确保它在访问之前具有一个值。

编辑:

在您发表评论之后,建议您消除boolean变量,而改用return语句:

public static boolean validCoordinate(String coordinate, int dimension) {
    String [] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    int [] numbers = new int [dimension];
    int one = 1;
    for(int i = 0; i < dimension; i++){
        numbers[i] = one + i;
    }
    for(int i = 0; i < dimension; i++){
        if((Character.toString(coordinate.charAt(0))).contains(alphabet[i])) {
            for(int j = 0; j < dimension; j++) {
                if ((coordinate.substring(1)).contains(Integer.toString(numbers[j]))) {
                    return true;
                }
            }
        }
    }

    return false;
}

这样,当boolean变量设置为true时,您不必担心会中断嵌套循环。

答案 2 :(得分:0)

import java.util.regex.*;

public static boolean validCoordinate(String coordinate, int dimension)
{
    Pattern p = Pattern.compile("[A-Z]+");
    Matcher m = p.matcher(coordinate);
    return m.matches();
}