1

嗨,我想让字母 x 出现在第 1-4 行,字母 y 出现在第 7-10 行。出于某种原因,当我放置 else 而不是 else 时,它​​会起作用,如果这样,除了 1-4 之外的每一行都得到“y”。它标记了 else 已读并说要删除此令牌并说 Null Pointer Exception 我在第 26 行收到错误,即带有 frame.add 的错误

import java.awt.Color;
import java.awt.GridLayout;
import java.util.Random;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class ButtonGrid {
    JFrame frame=new JFrame();
    JButton[][] grid;
    public ButtonGrid(int width, int length){
        Random r=new Random();
        int w=r.nextInt(13-1)+1;
        frame.setLayout(new GridLayout(width,length));
        grid=new JButton[width][length];
        Scanner g = new Scanner(System.in);
        for(int y=0;y<length;y++){
            for(int x=0;x<width;x++){
                if (y < 4) {
                    grid[x][y]=new JButton("x");-I am trying to set lines 1-4 to x
                }
                else if (y>7){ 
                    grid[x][y]=new JButton("y");-I am trying to set lines 7-10 to y
                }
                frame.add(grid[x][y]);
                else{ "IT MARKS THIS AS WRONG"
                    grid[x][y]=new JButton(" ");
                }
            }
        }
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);``
    }
    public static void main(String[] args) {
        new ButtonGrid(10,10);

    }
}

我认为我所做的一切都是正确的,只是不确定为什么 eclipse 会给我这些错误。请帮忙!最终我将在第 7-10 行输入,但这个测试不起作用。如果有人知道如何帮助我,我正在 Swing 中玩棋盘游戏 Stratego。

4

4 回答 4

1

该行frame.add(grid[x][y]);放在 之后else if,会导致编译时错误。

if (y < 4) {
                    grid[x][y]=new JButton("x");-I am trying to set lines 1-4 to x
                }
                else if (y>7){ 
                    grid[x][y]=new JButton("y");-I am trying to set lines 7-10 to y
                }
                frame.add(grid[x][y]);
                else{ "IT MARKS THIS AS WRONG"
                    grid[x][y]=new JButton(" ");
                }

请通过if-else教程。

于 2013-09-13T01:12:24.473 回答
1

解决你的一个问题:你只能在一个else块之后立即有一个if块。您收到错误是因为您在块和块frame.add(grid[x][y]);之间插入了语句。else if { ... }else { ... }

于 2013-09-13T01:14:34.923 回答
0

您发布的代码不会编译生成 NullPointerException ,因为您有一个悬空else块:

frame.add(grid[x][y]);
else{ // *** this else block is not associated with any if block***
  grid[x][y]=new JButton(" ");
}

您只想发布导致错误的代码,或者在发布的代码中解释实际错误。

于 2013-09-13T01:09:17.353 回答
0

这一行代码放错了地方:

frame.add(grid[x][y]); // <<<<<<<<<<<<< This line should be here <<<<<<<<<<

这是您的整个列表。我注释掉了一些未使用的代码,但主要是上面的代码行放错了地方。

如果您有更多问题,我很乐意指导您。我的电子邮件地址是:kaydell@yahoo.com。

// Not used: import java.awt.Color;

import java.awt.GridLayout;
// Not Used: import java.util.Random;
// Not Used: import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
// Not used: import javax.swing.JTextField;

public class ButtonGrid {
    JFrame frame=new JFrame();
    JButton[][] grid;
    public ButtonGrid(int width, int length){
        // Not Used: Random r=new Random();
        // Not Used: int w=r.nextInt(13-1)+1;
        frame.setLayout(new GridLayout(width,length));
        grid=new JButton[width][length];
        // Not Used: Scanner g = new Scanner(System.in);
        for(int y=0;y<length;y++){
            for(int x=0;x<width;x++){
                if (y < 4) {
                    grid[x][y]=new JButton("x"); // -I am trying to set lines 1-4 to x
                }
                else if (y>7){ 
                    grid[x][y]=new JButton("y"); // -I am trying to set lines 7-10 to y
                }
                else { // "IT MARKS THIS AS WRONG"
                    grid[x][y]=new JButton(" ");
                }
                frame.add(grid[x][y]); // <<<<<<<<<<<<< This line should be here <<<<<<<<<<
            }
        }
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true); // ``
    }
    public static void main(String[] args) {
        new ButtonGrid(10,10);

    }
}
于 2013-09-13T18:00:17.230 回答