英文:
how to set input as public constanta
问题
以下是你要翻译的内容:
hi all i have code main and tictactoe class
here my example
of main class. in this code i input something like string number
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of ROW Column Do you want to use");
String input = scanner.next();
Integer Input = Integer.parseInt(input);
new TTTGraphics2P(Input); // Let the constructor do the job
}
});
and this is for my class of tictactoe program. if i run this code i only have 3x3 tictactoe program, so i want to modify one of code using my input so my tictactoe will be Input x input
public class TTTGraphics2P extends JFrame {
// Named-constants for the game board
public static final int ROWS = 3; // ROWS by COLS cells
public static final int COLS = 3;
// Named-constants of the various dimensions used for graphics drawing
public static final int CELL_SIZE = 100; // cell width and height (square)
public static final int CANVAS_WIDTH = CELL_SIZE * COLS; // the drawing canvas
public static final int CANVAS_HEIGHT = CELL_SIZE * ROWS;
public static final int GRID_WIDTH = 8; // Grid-line's width
public static final int GRID_WIDHT_HALF = GRID_WIDTH / 2; // Grid-line's half-width
// Symbols (cross/nought) are displayed inside a cell, with padding from border
public static final int CELL_PADDING = CELL_SIZE / 6;
public static final int SYMBOL_SIZE = CELL_SIZE - CELL_PADDING * 2; // width/height
public static final int SYMBOL_STROKE_WIDTH = 8; // pen's stroke width
// Use an enumeration (inner class) to represent the various states of the game
public enum GameState {
PLAYING, DRAW, CROSS_WON, NOUGHT_WON
}
private GameState currentState; // the current game state
// Use an enumeration (inner class) to represent the seeds and cell contents
public enum Seed {
EMPTY, CROSS, NOUGHT
}
private Seed currentPlayer; // the current player
private Seed[][] board ; // Game board of ROWS-by-COLS cells
private JPanel canvas; // Drawing canvas (JPanel) for the game board
private JLabel statusBar; // Status Bar
/** Constructor to setup the game and the GUI components
* @param input */
public TTTGraphics2P(Integer input) {
canvas = new DrawCanvas(); // Construct a drawing canvas (a JPanel)
canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
// The canvas (JPanel) fires a MouseEvent upon mouse-click
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) { // mouse-clicked handler
int mouseX = e.getX();
int mouseY = e.getY();
// Get the row and column clicked
int rowSelected = mouseY / CELL_SIZE;
int colSelected = mouseX / CELL_SIZE;
if (currentState == GameState.PLAYING) {
if (rowSelected >= 0 && rowSelected < ROWS && colSelected >= 0
&& colSelected < COLS && board[rowSelected][colSelected] == Seed.EMPTY) {
board[rowSelected][colSelected] = currentPlayer; // Make a move
updateGame(currentPlayer, rowSelected, colSelected); // update state
// Switch player
currentPlayer = (currentPlayer == Seed.CROSS) ? Seed.NOUGHT : Seed.CROSS;
}
} else { // game over
initGame(); // restart the game
}
// Refresh the drawing canvas
repaint(); // Call-back paintComponent().
}
});
你的问题是如何将以下字段更改为输入的值:
public static final int ROWS = 3; // ROWS by COLS cells
public static final int COLS = 3;
更改为:
public static final int ROWS = Input; // ROWS by COLS cells
public static final int COLS = Input;
解答:
要将这些字段更改为输入的值,你需要在构造函数 TTTGraphics2P
中传递一个参数 input
,然后使用这个参数来初始化 ROWS
和 COLS
字段。在构造函数内部,将参数 input
分配给这两个字段,像这样:
public TTTGraphics2P(Integer input) {
// ... (之前的代码)
// 在构造函数内部将输入的值赋给 ROWS 和 COLS 字段
ROWS = input;
COLS = input;
// ... (继续后续的代码)
}
然后,确保你的 ROWS
和 COLS
字段不再被声明为 final
,因为你将在构造函数中为它们赋值。
英文:
hi all i have code main and tictactoe class
here my example
of main class. in this code i input something like string number
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of ROW Column Do you want to use");
String input = scanner.next();
Integer Input = Integer.parseInt(input);
new TTTGraphics2P(Input); // Let the constructor do the job
}
});
and this is for my class of tictactoe program. if i run this code i only have 3x3 tictactoe program, so i want to modify one of code using my input so my tictactoe will be Input x input
public class TTTGraphics2P extends JFrame {
// Named-constants for the game board
public static final int ROWS = 3; // ROWS by COLS cells
public static final int COLS = 3;
// Named-constants of the various dimensions used for graphics drawing
public static final int CELL_SIZE = 100; // cell width and height (square)
public static final int CANVAS_WIDTH = CELL_SIZE * COLS; // the drawing canvas
public static final int CANVAS_HEIGHT = CELL_SIZE * ROWS;
public static final int GRID_WIDTH = 8; // Grid-line's width
public static final int GRID_WIDHT_HALF = GRID_WIDTH / 2; // Grid-line's half-width
// Symbols (cross/nought) are displayed inside a cell, with padding from border
public static final int CELL_PADDING = CELL_SIZE / 6;
public static final int SYMBOL_SIZE = CELL_SIZE - CELL_PADDING * 2; // width/height
public static final int SYMBOL_STROKE_WIDTH = 8; // pen's stroke width
// Use an enumeration (inner class) to represent the various states of the game
public enum GameState {
PLAYING, DRAW, CROSS_WON, NOUGHT_WON
}
private GameState currentState; // the current game state
// Use an enumeration (inner class) to represent the seeds and cell contents
public enum Seed {
EMPTY, CROSS, NOUGHT
}
private Seed currentPlayer; // the current player
private Seed[][] board ; // Game board of ROWS-by-COLS cells
private JPanel canvas; // Drawing canvas (JPanel) for the game board
private JLabel statusBar; // Status Bar
/** Constructor to setup the game and the GUI components
* @param input */
public TTTGraphics2P(Integer input) {
canvas = new DrawCanvas(); // Construct a drawing canvas (a JPanel)
canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
// The canvas (JPanel) fires a MouseEvent upon mouse-click
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) { // mouse-clicked handler
int mouseX = e.getX();
int mouseY = e.getY();
// Get the row and column clicked
int rowSelected = mouseY / CELL_SIZE;
int colSelected = mouseX / CELL_SIZE;
if (currentState == GameState.PLAYING) {
if (rowSelected >= 0 && rowSelected < ROWS && colSelected >= 0
&& colSelected < COLS && board[rowSelected][colSelected] == Seed.EMPTY) {
board[rowSelected][colSelected] = currentPlayer; // Make a move
updateGame(currentPlayer, rowSelected, colSelected); // update state
// Switch player
currentPlayer = (currentPlayer == Seed.CROSS) ? Seed.NOUGHT : Seed.CROSS;
}
} else { // game over
initGame(); // restart the game
}
// Refresh the drawing canvas
repaint(); // Call-back paintComponent().
}
});
my question is i want to change this field
public static final int ROWS = 3; // ROWS by COLS cells
public static final int COLS = 3;
become
public static final int ROWS = Input; // ROWS by COLS cells
public static final int COLS = Input;
how to build it ?
thank you all
答案1
得分: 1
只需使用构造函数设置rows
和cols
:
public void run() {
Scanner scanner = new Scanner(System.in);
System.out.print("Total rows: ");
int rows = scanner.nextInt();
System.out.print("Total columns: ");
int cols = scanner.nextInt();
new TTTGraphics2P(rows, cols);
}
public class TTTGraphics2P extends JFrame {
private final int rows;
private final int cols;
public TTTGraphics2P(int rows, int cols) {
this.rows = rows;
this.cols = cols;
}
}
英文:
Just use constructor to set rows
and cols
:
public void run() {
Scanner scanner = new Scanner(System.in);
System.out.print("Total rows: ");
int rows = scanner.nextInt();
System.out.print("Total columns: ");
int cols = scanner.nextInt();
new TTTGraphics2P(rows, cols);
}
public class TTTGraphics2P extends JFrame {
private final int rows;
private final int cols;
public TTTGraphics2P(int rows, int cols) {
this.rows = rows;
this.cols = cols;
}
}
答案2
得分: 1
如果将相同的值分配给最终变量,您将无法更改它。而且它应该是非静态的。如果我们将最终变量设为静态,就无法在构造函数中为其分配值。不要忘记声明没有值的最终变量。
声明没有值的最终变量。
public final int ROWS;
public final int COLS;
请参考此示例程序,以找到您问题的解决方案。
public class Solution {
public final int ROWS;
public final int COLS;
public Solution(int input) {
ROWS = input;
COLS = input;
System.out.println(ROWS);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
Solution s = new Solution(input);
}
}
英文:
If you assign same value to final variable you can't change it. And it should be a non-static. If we static a final variable we can't assign a value in constructor. And don't forget to declare final variable without value.
Declare final variables without value.
public final int ROWS;
public final int COLS;
Refer this sample program to find a solution for your problem.
public class Solution {
public final int ROWS;
public final int COLS;
public Solution(int input) {
ROWS=input;
COLS=input;
System.out.println(ROWS);
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int input=scanner.nextInt();
Solution s=new Solution(input);
}
}
答案3
得分: 0
由于您已将ROWS和COLS变量声明为static,它们将在类加载时进行初始化。由于它们是final的,一旦设置了值就不能更改。
为了实现您的要求,您可以按照以下方式修改TTTGraphics2P类,以读取输入并在类加载时将其设置为变量。
public class TTTGraphics2P extends JFrame {
// 游戏棋盘的命名常量
public static final int ROWS = getInput(); // 行乘以列的单元格数
public static final int COLS = getInput();
...
// 从用户读取标准输入
public static int getInput() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要使用的行列数:");
String input = scanner.next();
return Integer.parseInt(input);
}
...
}
英文:
As you have declared the ROWS and COLS variables as static they will be initialized when class is loaded. Since they are final, once set the value cannot be changed.
To achieve your requirement you can modify the TTTGraphics2P class as below to read the input and set to the variables at class loading.
public class TTTGraphics2P extends JFrame {
// Named-constants for the game board
public static final int ROWS = getInput(); // ROWS by COLS cells
public static final int COLS = getInput();
...
// Read standard input from the user
public static int getInput() {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of ROW Column Do you want to use");
String input = scanner.next();
return Integer.parseInt(input);
}
...
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论