Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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/svg/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 递归和/或getBackground()未按预期工作_Java_Swing_Recursion_Multidimensional Array_Colors - Fatal编程技术网

Java 递归和/或getBackground()未按预期工作

Java 递归和/或getBackground()未按预期工作,java,swing,recursion,multidimensional-array,colors,Java,Swing,Recursion,Multidimensional Array,Colors,我正在使用递归方法对用户输入的Boggle板上的JButton进行着色。例如,如果单词“CAT”用作单词参数,则该方法将搜索按钮[][]数组,以查找旁边有“a”和“T”的“C”,并将相应的按钮涂成橙色并返回true。然而,我的代码有一个问题,像catatat这样的词也会返回true,因为我的代码无意中允许重用按钮 问题是我在检查JButton是否已经被使用(已经被涂成橙色)时遇到了问题。当我在递归方法中使用getBackground()时,我发现jbutton仍然是默认的白色,即使它们在视觉上是

我正在使用递归方法对用户输入的Boggle板上的JButton进行着色。例如,如果单词“CAT”用作单词参数,则该方法将搜索按钮[][]数组,以查找旁边有“a”和“T”的“C”,并将相应的按钮涂成橙色并返回true。然而,我的代码有一个问题,像catatat这样的词也会返回true,因为我的代码无意中允许重用按钮

问题是我在检查JButton是否已经被使用(已经被涂成橙色)时遇到了问题。当我在递归方法中使用getBackground()时,我发现jbutton仍然是默认的白色,即使它们在视觉上是橙色的。有没有想过如何检测到JButton已经被使用过(已经被涂成橙色)

假设JButton数组中填充了新按钮,每个按钮上都有一个随机字母

public boolean findWord(String word) {
    clearButtons();
    for (int row = 0; row < length; row++) {
        for (int col = 0; col < length; col++) {
            if (findWord(word, row, col)) {
                System.out.println("");
                return true;
            }
        }
    }
    return false;
}

private boolean findWord(String word, int row, int col) {

    if(word.equals("")) {
        return true;
    }


    if (row < 0 || row >= length || 
             col < 0 || col >= length || 
             !(buttons[row][col].getText().equals(word.substring(0,1))) ||
             buttons[row][col].getBackground().equals(orange) // <- always is false
                ) {
        return false;
    }


        String rest = word.substring(1, word.length());

        boolean letter =
               findWord(rest, row-1, col-1) ||
               findWord(rest, row-1,   col) ||
               findWord(rest, row-1, col+1) ||
               findWord(rest, row, col-1) ||
               findWord(rest, row, col+1) ||
               findWord(rest, row+1, col-1) ||
               findWord(rest, row+1,   col) ||
               findWord(rest, row+1, col+1);

        if(letter) {
            buttons[row][col].setBackground(orange); // <- despite this
        }
        return letter;
}
public boolean findWord(字符串字){
clearButtons();
for(int row=0;row=长度| |
col<0 | | col>=长度
!(按钮[行][col].getText().equals(字.子字符串(0,1)))||
按钮[行][col].getBackground().equals(橙色)/如中所述

获取此组件的背景色

返回:此组件的背景色;如果此组件没有 如果具有背景色,则其父对象的背景色为 返回


此方法返回
Color
的实例,因此您需要比较
Color.orange
Color.orange

感谢大家的帮助,我可以通过添加按钮数组作为参数来找到答案

public boolean findWord(String word, int row, int col, JButton[][] buttons)
最后一种方法如下所示

    public boolean findWord(String word) {
    clearButtons(); //make buttons white again
    for (int row = 0; row < length; row++) {
        for (int col = 0; col < length; col++) {
            if (findWord(word, row, col, buttons)) {
                return true;
            }
        }
    }
    return false;
}

private boolean findWord(String word, int row, int col, JButton[][] buttons) {
    if(word.equals("")) {
        return true;
    }


    if (row < 0 || row >= length || 
             col < 0 || col >= length || 
             !(this.buttons[row][col].getText().equals(word.substring(0,1))) ||
             buttons[row][col].getBackground().equals(orange)
                ) {
        return false;
    }

        String rest = word.substring(1, word.length());
        boolean letter =
               findWord(rest, row-1, col-1, buttons) ||
               findWord(rest, row-1,   col, buttons) ||
               findWord(rest, row-1, col+1, buttons) ||
               findWord(rest, row, col-1, buttons) ||
               findWord(rest, row, col+1, buttons) ||
               findWord(rest, row+1, col-1, buttons) ||
               findWord(rest, row+1,   col, buttons) ||
               findWord(rest, row+1, col+1, buttons);
        if(!letter) {
            this.buttons[row][col].setBackground(white);
        }
        return letter;
}   
public boolean findWord(字符串字){
clearButtons();//再次将按钮变为白色
for(int row=0;row=长度| |
col<0 | | col>=长度
!(this.buttons[row][col].getText().equals(word.substring(0,1)))||
按钮[行][col].getBackground().equals(橙色)
) {
返回false;
}
字符串rest=word.substring(1,word.length());
布尔字母=
findWord(其余,第1行,第1列,按钮)||
findWord(其余、第1行、列、按钮)||
findWord(其余,第1行,列+1,按钮)||
findWord(其余、行、列1、按钮)||
findWord(其余、行、列+1、按钮)||
findWord(其余,行+1,列-1,按钮)||
findWord(其余、行+1、列、按钮)||
findWord(其余、行+1、列+1、按钮);
如果(!字母){
此.按钮[行][列].setBackground(白色);
}
回信;
}   

}

您调试到什么位置了?按钮[row][col].getBackground()返回什么?如果不清楚,很抱歉!1.橙色是前面声明的颜色2.按钮[row][col].getBackground()返回java.awt.color[r=255,g=255,b=255](默认白色)考虑提供一个演示你的问题的代码。这不是一个代码转储,而是你正在做的一个例子,它突出了你所面临的问题。这将导致更少的混乱和更好的响应。谢谢,抱歉!<代码> CurrutsP< <代码>?>代码>颜色橙色=新颜色(245, 130, 32)比较时,
应等于
橙色
。OP不需要使用一个常量值
新颜色(245,130,32)。等于(新颜色(245,130,32))
等于
:P
public Color getBackground()
public boolean findWord(String word, int row, int col, JButton[][] buttons)
    public boolean findWord(String word) {
    clearButtons(); //make buttons white again
    for (int row = 0; row < length; row++) {
        for (int col = 0; col < length; col++) {
            if (findWord(word, row, col, buttons)) {
                return true;
            }
        }
    }
    return false;
}

private boolean findWord(String word, int row, int col, JButton[][] buttons) {
    if(word.equals("")) {
        return true;
    }


    if (row < 0 || row >= length || 
             col < 0 || col >= length || 
             !(this.buttons[row][col].getText().equals(word.substring(0,1))) ||
             buttons[row][col].getBackground().equals(orange)
                ) {
        return false;
    }

        String rest = word.substring(1, word.length());
        boolean letter =
               findWord(rest, row-1, col-1, buttons) ||
               findWord(rest, row-1,   col, buttons) ||
               findWord(rest, row-1, col+1, buttons) ||
               findWord(rest, row, col-1, buttons) ||
               findWord(rest, row, col+1, buttons) ||
               findWord(rest, row+1, col-1, buttons) ||
               findWord(rest, row+1,   col, buttons) ||
               findWord(rest, row+1, col+1, buttons);
        if(!letter) {
            this.buttons[row][col].setBackground(white);
        }
        return letter;
}