Я пытаюсь получить значение из метода с использованием методов получения и установки, но не может заставить его вернуть ничего, кроме 0. Вот мой текущий код:Получение значения из метода
int goodRow;
int boardStatus[][] = {
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
};
public void placePiece(int column) {
boolean goodInput = false;
while(!goodInput) {
for(int x = 5; x >= 0; x--) {
if(boardStatus[x][column] == 0) {
setRow(x);
boardStatus[x][column] = 1;
goodInput = true;
break;
}else if(boardStatus[0][x] == 1) {
goodInput = true;
break;
}
}
}
}
public int getRow() {
return goodRow;
}
public void setRow(int row) {
goodRow = row;
}
Моя цель чтобы иметь возможность вызвать getRow() и извлечь значение x, принятое в методе. Внутри моего метода placePiece()
я использую метод setRow()
для получения значения x, но моя стратегия пока не сработала. Как я могу получить значение x из моего метода, чтобы я мог использовать его в другом месте в моей программе?
----- EDIT -----
Вот мой полный код:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JPanel implements MouseListener {
moveMaker mover = new moveMaker();
clickDetector click = new clickDetector();
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
for(int y = 0; y < 6; y++) {
for(int x = 0; x < 7; x++) {
g.fillOval(x*70 + 10, y*70 + 10, 50, 50);
}
}
g.setColor(Color.BLACK);
g.fillRect(0, 430, 500, 50);
g.setColor(Color.white);
g.drawString("CONNECT FOUR", 250, 450);
g.setColor(Color.LIGHT_GRAY);
click.paintPiece(g);
}
public void setUpGUI() {
JFrame mainFrame = new JFrame();
clickDetector click = new clickDetector();
mainFrame.addMouseListener(click);
mainFrame.addMouseListener(this);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(500, 500);
mainFrame.getContentPane().add(this);
mainFrame.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e) {
repaint();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
public static void main(String args[]) {
GUI gui = new GUI();
gui.setUpGUI();
}
}
-
public class moveMaker {
int goodRow;
int boardStatus[][] = {
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
};
public void placePiece(int column) {
boolean goodInput = false;
while(!goodInput) {
for(int x = 5; x >= 0; x--) {
if(boardStatus[x][column] == 0) {
setRow(x);
boardStatus[x][column] = 1;
goodInput = true;
break;
}else if(boardStatus[0][x] == 1) {
setRow(x);
goodInput = true;
break;
}else{
System.out.println(x + " is taken.");
}
}
}
}
public int getRow() {
return goodRow;
}
public void setRow(int row) {
goodRow = row;
}
}
-
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class clickDetector implements MouseListener {
moveMaker mover = new moveMaker();
int mouseX = 0;
@Override
public void mouseClicked(MouseEvent e) {
int xLocation = (e.getX() + 10)/70;
mover.placePiece(xLocation);
setMouseX(xLocation);
System.out.println("Place piece at " + mouseX + ", " + mover.getRow() + ".");
}
public void paintPiece(Graphics g) {
int x = (getMouseX()+10)/70;
int y = (mover.getRow()+10)/70;
g.fillOval(x, y, 50, 50);
System.out.println(x + ", " + y);
}
public int getMouseX() {
return mouseX;
}
public void setMouseX(int x) {
mouseX = x;
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
Если вы не может заставить ваш getter возвращать ничего, кроме нуля, это может быть признаком того, что ваша переменная goodRow никогда не установлена в значение (поскольку значение по умолчанию равно нулю).Вы действительно вызываете setRow перед вызовом getRow? – Jyr
@jyr Да, я установил точки останова в setRow (x) и getRow (x) в моем другом классе, а setRow (x) был первым. – AlecR
Можете ли вы показать код, который использует этот код? –