当前位置: 首页 > 知识库问答 >
问题:

试图创建一个返回二维数组的函数,在函数内部使用开关。获取“重复的局部变量”警告

宿丰
2023-03-14
public class Apples {
    
    static char[][]createBoard(int boardType){ 
        char[][] board = new char [8][10];
        switch (boardType){
            case 1:
                char board[][] = {{' ','1','2','3','4','5','6','7','8','9'},{'1','#','#','#','-','@','-','#','#','#'},{'2','#','#','-','@','@','@','-','#','#'},{'3','#','-','@','@','-','@','@','-','#'},{'4','-','@','@','@','@','@','@','-'}};
                break;
            case 2: 
                char board[][] = {{' ','1','2','3','4','5'},{'1','-','-','-','-','-'},{'2','-','@','@','@','-'},{'3','-','-','@','-','-'},{'4','-','-','@','-','-'},{'5','-','-','-','-','-'}};
                break;
        }
        return board;
    }   
    
    public static void main (String args[]) {
        System.out.println("This is your array :");
        
        char chosenboard[][] = createBoard(2);
        for (int row = 0; row < chosenboard.length; row++) {
            for (int column = 0; column < chosenboard[row].length; column++) {
                System.out.print(chosenboard[row][column]); 
            }
        }
    }
}
public class Apples {
    

    static char[][]createBoard(int boardType){ 
        char[][]board;
        switch (boardType){
            case 1:
                board = new char[][] {{' ','1','2','3','4','5','6','7','8','9'},{'1','#','#','#','-','@','-','#','#','#'},{'2','#','#','-','@','@','@','-','#','#'},{'3','#','-','@','@','-','@','@','-','#'},{'4','-','@','@','@','@','@','@','-'}};
                break;                          
            case 2: 
                board = new char[][] {{' ','1','2','3','4','5'},{'1','-','-','-','-','-'},{'2','-','@','@','@','-'},{'3','-','-','@','-','-'},{'4','-','-','@','-','-'},{'5','-','-','-','-','-'}}; //here I am declaring and assigning again
                break;
            
        }
        return board;
                }
                                
    
    public static void main (String args[]) {       
        System.out.println("This is your array :"); 
            char chosenboard[][] = createBoard(2);
            for (int row = 0; row <chosenboard.length; row++) {
                for (int column = 0; column < chosenboard[row].length; column++) {
                    System.out.print(chosenboard[row][column]); 
            }
    
    }

}
}

以前的错误“重复的局部变量”消失了,但我得到了一个新的错误在我的返回板行。它说“本地可变板可能尚未初始化”

共有1个答案

吕衡
2023-03-14

您的代码没有编译,因为变量board已经在switch语句之前定义,并且不能(在该范围内)再次定义。

static char[][] createBoard(int boardType) {
  char[][] board = new char[8][10];          // <= declared and assigned
  switch (boardType) {
    case 1:
      char board[][] = {{' ', /* ... */ }};  // <= declared and assigned again

在case中,您可以创建一个新的2D数组,然后将其赋给已经声明的变量,如下所示:

char[][] board; // declaration
board = new char[][]{{' ', '1', '2', '3', '4', '5', '6', '7', '8', '9'}, {'1', '#', '#', '#', '-', '@', '-', '#', '#', '#'}, {'2', '#', '#', '-', '@', '@', '@', '-', '#', '#'}, {'3', '#', '-', '@', '@', '-', '@', '@', '-', '#'}, {'4', '-', '@', '@', '@', '@', '@', '@', '-'}};

仔细看一下您的方法createboard所做的事情,您可以进一步简化它,直接构造并返回二维数组:

static char[][] createBoard(int boardType) {
    switch (boardType) {
        case 1:
            return new char[][]{{' ', '1', '2', '3', '4', '5', '6', '7', '8', '9'}, {'1', '#', '#', '#', '-', '@', '-', '#', '#', '#'}, {'2', '#', '#', '-', '@', '@', '@', '-', '#', '#'}, {'3', '#', '-', '@', '@', '-', '@', '@', '-', '#'}, {'4', '-', '@', '@', '@', '@', '@', '@', '-'}};
        case 2:
            return new char[][]{{' ', '1', '2', '3', '4', '5'}, {'1', '-', '-', '-', '-', '-'}, {'2', '-', '@', '@', '@', '-'}, {'3', '-', '-', '@', '-', '-'}, {'4', '-', '-', '@', '-', '-'}, {'5', '-', '-', '-', '-', '-'}};
        default:
            return new char [8][10];
    }
}
 类似资料:
  • 当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。 使用局部变量 例7.3 使用局部变量 #!/usr/bin/python # Filename: func_local.py deffunc(x):     print'x is', x    

  • 问题内容: 我正在读一本叫做《 Go编程语言》的书,在有关指针的第二章中,写了以下内容 函数返回局部变量的地址是绝对安全的。例如,在下面的代码中,即使调用返回后,由对f的特定调用创建的局部变量v仍将存在,并且指针p仍将引用它: 我完全不明白这一点,应该在执行函数后销毁局部变量。是因为可能v是在堆上分配的。我知道在C语言中,如果您使用malloc分配空间,函数执行后就不会销毁它,因为它在堆上。 问题

  • 我正在尝试使用Mongo和node/express JS的这个map函数构建一个对象数组。由于某种原因,当我运行控制台时,数组返回空。在map函数外部记录日志,但在map函数内部,它显示了每次迭代生成的数组。 为什么会发生这种行为?

  • 问题内容: 我正在使用函数,这样我的程序就不会一团糟,但我不知道如何将局部变量变成全局变量。 问题答案: 这是两种实现相同目的的方法: 使用参数并返回(推荐) 运行时,将获得以下输出 使用全局变量(永远不要这样做) 现在您将获得:

  • 问题内容: 如果我有这个: 我之前已定义,因此效果很好。 我的问题是在第6行中调用。我试图用相同的定义在第一个函数之外进行定义,但是即使调用,它也始终相同。 我希望每次调用第一个函数然后再调用第二个函数时,都具有一个不同的。 我能做到这一点,而不界定外? 问题答案: 是的,您应该考虑在一个类中定义您的函数,并使word成为成员。这比较干净 创建类后,您必须将其实例化为对象并访问成员函数。 另一种方

  • 怎样使一个变量变成“局部”变量? 局部变量 如果变量用local来声明,那么它就只能够在该变量被声明的代码块中可见。 这个代码块就是局部范围。 在一个函数中,一个局部变量只有在函数代码中才有意义.[1] 例子 24-12. 局部变量的可见范围 #!/bin/bash # ex62.sh: 函数内部的局部变量与全局变量。 func () { local loc_var=23 #