###実現したいこと
Board
の中でStone
の中のものを呼び出す。その際に中心の座標であるp.x
とp.y
を代入していく。
###問題点
下記のようなエラーが出てきます。for文の中で一回一回初期化しなければならないのでしょうか。またそのようであればどのように初期化すればよいのでしょうか?
Reversi.java:87: エラー: 変数pは初期化されていない可能性があります p.x=px; //中心座標を定義 ^ エラー1個
###コード
java
1import java.awt.*; 2import javax.swing.*; 3 4//石に対応するクラス 5class Stone{ 6 public final static int black=1; //黒 7 public final static int white=2; //白 8 private int observe; //表面の色 9 //コンストラクタ 10 Stone(){ 11 observe=0; //非配置にする 12 } 13 14 //表面の色を設定する 15 void setObserve(int color){ 16 if(color==black || color==white){ 17 observe=color; 18 }else{ 19 System.out.println("黒か白でなければいけません"); 20 } 21 } 22 23 //表面の色で中心p,半径radの円を塗りつぶす 24 void paint(Graphics g,Point p,int rad){ 25 /*省略*/ 26 27 } 28} 29 30class Board{ 31 Stone[][] stone=new Stone[8][]; 32 33 //コンストラクタ 34 Board(){ 35 } 36 37 //画面描画 38 void paint(Graphics g,int unit_size){ 39 int rad=32; 40 41 /*省略*/ 42 43 int px=120,py=120; 44 for(int i=0;i<8;i++){ 45 for(int j=0;j<8;j++){ 46 stone[i][j].setObserve(0); 47 } 48 } 49 stone[3][3].setObserve(1); 50 stone[3][4].setObserve(2); 51 stone[4][3].setObserve(2); 52 stone[4][4].setObserve(1); 53 for(int i=0;i<8;i++){ 54 for(int j=0;j<8;j++){ 55 Point p; 56 p.x=px; //中心座標を定義 57 p.y=py; 58 stone[i][j].paint(g,p,rad); 59 py=py+80; 60 } 61 px=px+80; 62 } 63 } 64} 65 66 67public class Reversi extends JPanel{ 68 public final static int UNIT_SIZE=80; 69 Board board =new Board(); 70 71 //コンストラクタ 72 public Reversi(){ 73 setPreferredSize(new Dimension(800,800)); 74 } 75 76 //画面描画 77 public void paintComponent(Graphics g){ 78 board.paint(g, UNIT_SIZE); //Boardクラスのpaintメソッドを呼び出す 79 } 80 81 //起動 82 public static void main(String[] args){ 83 JFrame f=new JFrame(); 84 f.getContentPane().setLayout(new FlowLayout()); 85 f.getContentPane().add(new Reversi()); 86 f.pack(); 87 f.setResizable(false); 88 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 89 f.setVisible(true); 90 } 91 92 93}
全然ご質問と関係無いですが、 UNIT_SIZE が全く使われてないですね…。
回答2件
あなたの回答
tips
プレビュー