我正在尝试在java中实现 A *算法。要求用户键入要成为网格的宽度和高度。我的问题是验证输入。这是我的代码:
public class Map extends java.awt.Panel implements Serializable
{
JFrame frame = new JFrame();
String rows = JOptionPane.showInputDialog(frame,
"Συμπληρώστε τον αριθμό γραμμών του πλέγματος: \n",
"Δημιουργία πλέγματος",
JOptionPane.PLAIN_MESSAGE);
String cols = JOptionPane.showInputDialog(frame,
"Συμπληρώστε τον αριθμό στηλών του πλέγματος: \n",
"Δημιουργία πλέγματος",
JOptionPane.PLAIN_MESSAGE);
int rowsnum = Integer.parseInt(rows);
int colsnum = Integer.parseInt(cols);
GridCell gridCell[][] = new GridCell[rowsnum][colsnum];
public Map()
{
super();
setLayout(new GridLayout(rowsnum,colsnum));
for(int i=0;i<rowsnum;i++){
for(int j=0;j<colsnum;j++){
gridCell[i][j] = new GridCell();
gridCell[i][j].setPosition(new Point(i,j));
add(gridCell[i][j]);
}
}
}
我尝试使用新方法检查输入,但我的问题是我需要访问其他类中的rowsnum
,colsnum
和gridcell[]
程序。
我是Java的新手,我非常感谢任何帮助。 : - )
答案 0 :(得分:1)
现在你的rowsnum,colsnum和GridCells是你的“Map”类中的变量。
为了从其他类中访问它作为实例变量,
public int rowsnum = // something
public int colsnum = // something
public GridCell girdCell[][] = //something
“public”表示可以从班级外部访问该变量。
在Map类之外,
Map m = new Map();
int rowsnum = m.rowsnum
int colsnum = m.colsnum
// access instance variables
但是,最好为实例变量创建getter和setter。
即创建用于获取和设置这些变量的单独方法。
public int getRowsNum() {
return rowsnum;
}
等。
答案 1 :(得分:1)
您可以通过Map类对象访问它们(将访问修饰符更改为公开这些变量)
示例:在B类中
public class Test {
public static void main(String args[]){
Map someMap = new Map();
//Access gridCell
someMap.gridCell;
//Access rowsnum
someMap.rowsnum;
//Access colsnum
someMap.colsnum;
}
}
或者您可以将它们设为静态,并使用类名
访问它们示例: Map.rowsnum;
答案 2 :(得分:0)
我能想到的最简单的解决方案
使用If
验证宽度/高度数字public class Map extends java.awt.Panel implements Serializable
{
String width = JOptionPane.showInputDialog("Give Width (>5 , <30)");
int w = Integer.parseInt(width);
String height = JOptionPane.showInputDialog("Give height (>5 , <30)");
int h = Integer.parseInt(height);
GridCell gridCell[][] = new GridCell[w][h];
public Map()
{
super();
setLayout(new GridLayout(w,h));
if ( w < 5)
{JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
System.exit(0);}
if ( w > 30)
{JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
System.exit(0);}
if ( h < 5)
{JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
System.exit(0);}
if ( h > 30)
{JOptionPane.showMessageDialog ( null, "Number out of Limits ,application closing" );
System.exit(0);}
for(int i=0;i<w;i++){
for(int j=0;j<h;j++){
gridCell[i][j] = new GridCell();
gridCell[i][j].setPosition(new Point(i,j));
add(gridCell[i][j]);
}
}
}
使用public main上的try-catch验证字符串输入错误
public static void main(String[] argv) {
try{
AStar2 test = new AStar2();
test.setLocationRelativeTo(null);
test.setDefaultCloseOperation(test.EXIT_ON_CLOSE);}
catch(NumberFormatException e){JOptionPane.showMessageDialog ( null, "BLOODY HELL DONT PUT STRINGS FOR INPUT, APPLICATION IS CLOSING , TRY BETTER NEXT TIME" );}
}
}