- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里收到一个空指针异常,我不确定为什么。
import cs251.lab2.GomokuGUI;
import cs251.lab2.GomokuModel;
public class Gomoku implements GomokuModel {
public Square[][] gameBoard;
public static void main(String[] args) {
Gomoku game = new Gomoku();
if (args.length > 0) {
game.setComputerPlayer(args[0]);
}
GomokuGUI.showGUI(game);//This calls newGame().
}
@Override
public void newGame() { //Generic constant values.
this.gameBoard = new Square[NUM_HSQUARES][NUM_VSQUARES];
// For every block
for (Square[] s : gameBoard)
// And every element of that block
for (Square ss : s)
// Reset to empty.
{ss = Square.EMPTY;}
}
@Override
public String boardString() {
String output = "";
//This is where the problem is!!
for (Square[] s : this.gameBoard) // For every block
{
//output appends either " ", "x" or "o" accordingly.
for (Square ss : s)//For every element of the block.
{output += ss.toChar();}
// Must be time for a new row already!
output += "\n";
}
//output should now be some big nasty string of love xoxo\n baby.
return output;
}
}
存在以下几行,并通过 GomokuGUI.class 调用
public static void showGUI(final GomokuModel model) {
// For thread safety, invoke GUI code on event-dispatching thread
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GomokuGUI(model);
}
});
}
..........
private GomokuGUI ( GomokuModel gomokuModel ) {
model = gomokuModel;
model.newGame ( );
//Buncha GUI code...
}
如果我删除这个。引用我仍然收到错误。也许我误解了这个?我想通过在 newGame() 中创建大小,我创建了一个与这个游戏实例相关联的唯一对象 gameBoard,并且通过调用 game.gameBoard(这是函数内的 this.gameBoard)我可以查看它的元素。
package cs251.lab2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* This is the graphical user interface for the Gomoku game.
*/
public class GomokuGUI {
/**
* Class used to display the Gomoku game board
*/
private class BoardPanel extends JPanel {
/** Used to shut up the compiler */
private static final long serialVersionUID = 1L;
/**
* Draws the x's and o's on the game board in the right places.
* @param g Graphics context for the component
*/
public void drawBoard ( Graphics2D g ) {
// Read the string from the model so I know what to draw,
// convert to lowercase just in case.
String s = model.boardString().toLowerCase();
// Split board into rows
String[] rowStrings = s.split("\\n");
// Figure out number of rows and columns
int numRows = rowStrings.length;
int numCols = rowStrings[0].length();
// Use a somewhat wide pen based on size of box
int offset = SQUARE_SIZE / 5;
int x2offset = 2 * offset;
g.setStroke ( new BasicStroke ( offset ) );
// Draw the signs on the board (within the squares)
for ( int row = 0; row < numRows; row++ ) {
for ( int col = 0; col < numCols; col++ ) {
// Choose what to do depending on the character in the string I got
switch ( rowStrings[row].charAt(col) ) {
case 'o': // Draw a ring
g.setColor ( Color.BLUE );
g.drawOval ( col * SQUARE_SIZE + offset,
row * SQUARE_SIZE + offset,
SQUARE_SIZE - x2offset,
SQUARE_SIZE - x2offset );
break;
case 'x': // Draw an X
g.setColor ( Color.RED );
g.drawLine ( col * SQUARE_SIZE + offset,
row * SQUARE_SIZE + offset,
( col + 1 ) * SQUARE_SIZE - offset,
( row + 1 ) * SQUARE_SIZE - offset );
g.drawLine ( ( col + 1 ) * SQUARE_SIZE - offset,
row * SQUARE_SIZE + offset,
col * SQUARE_SIZE + offset,
( row + 1 ) * SQUARE_SIZE - offset );
break;
}
}
}
}
/**
* Mainly used to redraw the grid on the board, so that it's always there.
*/
@Override
public void paintComponent ( Graphics g ) {
g.setColor ( Color.BLACK );
int width = getWidth ( );
int height = getHeight ( );
for ( int row = 0; row <= GomokuModel.NUM_VSQUARES; row++ ) {
int line = row * SQUARE_SIZE;
// Draw the vertical lines
g.drawLine ( 0, line, width, line );
// Draw the horizontal lines
g.drawLine ( line, 0, line, height );
}
// Then draw the contents
drawBoard ( (Graphics2D) g );
}
}
/**
* Handles a mouse click on the board.
* @param x X position of the click
* @param y Y position of the click
*/
private void doMouseClick(int x, int y) {
int row = y / SQUARE_SIZE;
int col = x / SQUARE_SIZE;
boolean gameOver = true;
// Check current status and decide what to do
GomokuModel.Outcome outcome = model.doClick ( row, col );
// Better repaint so that the latest move shows up
boardFrame.repaint ( );
// If necessary present a dialog box
switch ( outcome ) {
case DRAW:
JOptionPane.showMessageDialog ( null, "Draw Game!", "Game Over",
JOptionPane.INFORMATION_MESSAGE );
break;
case CROSS_WINS:
JOptionPane.showMessageDialog ( null, "Cross Wins!", "Game Over",
JOptionPane.INFORMATION_MESSAGE );
break;
case RING_WINS:
JOptionPane.showMessageDialog ( null, "Ring Wins!", "Game Over",
JOptionPane.INFORMATION_MESSAGE );
break;
default:
// No action to take. Either game is over or someone clicked on the wrong spot.
gameOver = false;
break;
}
if ( gameOver ) {
// Question user about another game, and either quit or restart
int choice = JOptionPane.showConfirmDialog ( null, "Play again?", "Play again?",
JOptionPane.YES_NO_OPTION );
if ( choice == JOptionPane.NO_OPTION ) {
System.exit ( 0 );
} else {
model.newGame();
}
}
// Repaint after user choose a new game as otherwise we'll still see the old
// contents of the board, and that's no fun.
boardFrame.repaint();
}
/** Size in pixels of each square */
public static final int SQUARE_SIZE = 20;
/** Reference to the model class */
private final GomokuModel model;
/** Reference to my board */
private final JFrame boardFrame;
/**
* Constructor for the GUI.
* @param gomokuModel Reference to a model that correctly
* implements the interface, so that I know that all methods are
* there.
*/
private GomokuGUI ( GomokuModel gomokuModel ) {
model = gomokuModel;
model.newGame ( );
// Create the frame
boardFrame = new JFrame ( );
boardFrame.setTitle ( "Gomoku" );
// Create the board
BoardPanel boardPanel = new BoardPanel ( );
boardPanel.setPreferredSize ( new Dimension (
GomokuModel.NUM_HSQUARES * SQUARE_SIZE + 1,
GomokuModel.NUM_VSQUARES * SQUARE_SIZE + 1 ) );
boardPanel.addMouseListener ( new MouseAdapter() {
@Override
public void mouseClicked ( MouseEvent e ) {
int x = e.getX ( );
int y = e.getY ( );
doMouseClick(x, y);
}
});
// Create status panel for new game and quit buttons
JPanel statusPanel = new JPanel ( new FlowLayout ( ) );
statusPanel.setPreferredSize ( new Dimension (
GomokuModel.NUM_HSQUARES * SQUARE_SIZE, 50 ) );
// Create a new New Game Button
JButton newGameButton = new JButton ( "New Game" );
newGameButton.addActionListener ( new ActionListener ( ) {
public void actionPerformed ( ActionEvent e ) {
model.newGame ( );
boardFrame.repaint ( );
}
} );
statusPanel.add ( newGameButton );
// Create a nice quit button
JButton quitButton = new JButton ( "Quit" );
quitButton.addActionListener ( new ActionListener ( ) {
public void actionPerformed ( ActionEvent e ) {
System.exit ( 0 );
}
} );
statusPanel.add ( quitButton );
// Add the panels to the frame
boardFrame.add ( statusPanel, BorderLayout.NORTH );
boardFrame.add ( boardPanel, BorderLayout.CENTER );
// Make sure it looks good
boardFrame.pack ( );
boardFrame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
boardFrame.setLocationRelativeTo ( null );
boardFrame.setResizable ( false );
boardFrame.setVisible ( true );
}
/**
* Construct and display GUI for a Gomoku game
* @param model Reference to a model that correctly
* implements the interface, so that I know that all methods are
* there.
*/
public static void showGUI(final GomokuModel model) {
// For thread safety, invoke GUI code on event-dispatching thread
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GomokuGUI(model);
}
});
}
}
最佳答案
// For every block
for (Square[] s : gameBoard)
for (Square ss : s)
// Reset to empty.
{ss = Square.EMPTY;}
这个循环什么都不做。它等同于:
// For every block
for (Square[] s : gameBoard) {
for(int i = 0; i < s.length; i++) {
Square ss;
ss = s[i];
ss = Square.EMPTY;
}
}
您可以看到,实际上并没有改变棋盘。
相反,这样做:
for(Square[] s : gameBoard)
for(int i = 0; i < s.length; i++)
s[i] = Square.EMPTY;
或者这个:(并导入 java.util.Arrays)
for(Square[] s : gameBoard)
Arrays.fill(s, Square.EMPTY);
关于java - 需要帮助在我的 Java 应用程序中查找 Nullpointer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21819264/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!