Ошибка в коде - Java (241047)

Узнай цену своей работы

Формулировка задачи:

Возникла ошибка при разбиение на два классы, помогите пожалуйста решить эту проблему.
Листинг программы
  1. import javax.swing.*;
  2. import javax.swing.border.BevelBorder;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.KeyEvent;
  7. public class Pole extends JFrame implements ActionListener
  8. {
  9. private static final long serialVersionUID = 1L;
  10. public int ButtonsInGame, vin;
  11. final int NULL = 0,
  12. X = 1,
  13. O = (-1);
  14. public static void main(String[] args)
  15. {
  16. SwingUtilities.invokeLater(new Runnable()
  17. {
  18. public void run()
  19. {
  20. Pole thisClass = new Pole();
  21. thisClass.setVisible(true);
  22. }
  23. });
  24. }
  25. public Pole()
  26. {
  27. initialize();
  28. }
  29. public void initialize()
  30. {
  31. this.setSize(240, 290);
  32. this.setContentPane(getJContentPane());
  33. this.setTitle("Tic-tac-toe");
  34. this.New_Game();
  35. }
  36. public JPanel jContentPane = null;
  37. public JLabel StatusGame = null;
  38. public JPanel getJContentPane()
  39. {
  40. if (jContentPane == null)
  41. {
  42. StatusGame = new JLabel();
  43. StatusGame.setHorizontalAlignment(SwingConstants.CENTER);
  44. StatusGame.setBackground(Color.black);
  45. StatusGame.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED);
  46. jContentPane = new JPanel();
  47. jContentPane.setLayout(new BorderLayout());
  48. jContentPane.setBackground(new Color(0, 204, 0));
  49. jContentPane.add(getJPanel(), BorderLayout.NORTH);
  50. jContentPane.add(getJPanel1(), BorderLayout.CENTER);
  51. jContentPane.add(StatusGame, BorderLayout.SOUTH);
  52. }
  53. return jContentPane;
  54. }
  55. public JPanel jPanel = null;
  56. public JPanel getJPanel()
  57. {
  58. if (jPanel == null)
  59. {
  60. jPanel = new JPanel();
  61. jPanel.setLayout(new FlowLayout());
  62. jPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
  63. jPanel.setBackground(new Color(32, 32, 32));
  64. jPanel.add(getNew(), null);
  65. }
  66. return jPanel;
  67. }
  68. public JButton New = null;
  69. public JButton getNew()
  70. {
  71. if (New == null)
  72. {
  73. New = new JButton("Start new game");
  74. New.setBackground(new Color(0, 204, 0));
  75. }
  76. return New;
  77. }
  78. public JButton[] field = null;
  79. public JPanel jPanel1 = null;
  80. public JPanel getJPanel1()
  81. {
  82. if (jPanel1 == null)
  83. {
  84. jPanel1 = new JPanel(new GridLayout(3,3,1,1));
  85. jPanel1.setBackground(new Color(0, 0, 0));
  86. field = new JButton[9];
  87. for(int i=0;i<field.length;i++)
  88. {
  89. field[i] = new JButton();
  90. setState(i);
  91. field[i].setForeground(new Color(0,204,0));
  92. jPanel1.add(field[i]);
  93. field[i].setBackground(new Color(0,102,0));
  94. }
  95. }
  96. return jPanel1;
  97. }
  98. public void setState(int index, int state)
  99. {
  100. field[index].setText(toStrTipe(state));
  101. field[index].setEnabled(!(state==1||state==-1));
  102. ButtonsInGame--;
  103. }
  104.  
  105. public void actionPerformed(ActionEvent e)
  106. {
  107. if(e.getSource().equals(New))New_Game();
  108. for(int i=0 ; i<9 ; i++)
  109. {
  110. if(e.getSource().equals(field[i]))
  111. {
  112. setState(i, O);
  113. set_mass();
  114. vin = lock_winner();
  115. if(vin!=0)StatusGame.setText(who_win(vin));
  116. else
  117. {
  118. setState(tactica(), X);
  119. set_mass();
  120. int ret = lock_winner() ;
  121. if(ret>0)StatusGame.setText(who_win(ret));
  122. }
  123. }
  124. }
  125. }
  126. }
Листинг программы
  1. import java.util.Random;
  2. import java.util.Vector;
  3. public class Game extends Pole
  4. {
  5. private static final long serialVersionUID = 1L;
  6. public int k[]= new int [9];
  7. public int tactica()
  8. {
  9. if(ButtonsInGame==9)return 4;
  10. if(ButtonsInGame==8)
  11. while(true)
  12. {
  13. switch(getRand(3))
  14. {
  15. case 0:
  16. if(k[0]==0)return 0;
  17. case 1:
  18. if(k[2]==0)return 2;
  19. case 2:
  20. if(k[6]==0)return 6;
  21. case 3:
  22. if(k[8]==0)return 8;
  23. continue;
  24. }
  25. }
  26. if(ButtonsInGame<8)
  27. {
  28. int res = empty_field(X);
  29. if(res!=-1)return res;
  30. res = empty_field(O);
  31. if(res!=-1)return res;
  32. }
  33. return rand_field();
  34. }
  35. public void New_Game()
  36. {
  37. for(int i=0;i<9;i++)
  38. {
  39. setState(i, NULL);
  40. field[i].setContentAreaFilled(false);
  41. }
  42. ButtonsInGame = 9;
  43. StatusGame.setText(who_win(3));
  44. int in = tactica();
  45. if(in!=-1)setState(in, X);
  46. }
  47. public int lock_winner()
  48. {
  49. if(k[0]+k[1]+k[2]==3||k[0]+k[1]+k[2]==-3)
  50. {
  51. line(0,1,2);
  52. return k[0];
  53. }
  54. if(k[0]+k[3]+k[6]==3||k[0]+k[3]+k[6]==-3)
  55. {
  56. line(0,3,6);
  57. return k[0];
  58. }
  59. if(k[6]+k[7]+k[8]==3||k[6]+k[7]+k[8]==-3)
  60. {
  61. line(6,7,8);
  62. return k[8];
  63. }
  64. if(k[2]+k[5]+k[8]==3||k[2]+k[5]+k[8]==-3)
  65. {
  66. line(2,5,8);
  67. return k[8];
  68. }
  69. if(k[0]+k[4]+k[8]==3||k[0]+k[4]+k[8]==-3)
  70. {
  71. line(0,4,8);
  72. return k[4];
  73. }
  74. if(k[2]+k[4]+k[6]==3||k[2]+k[4]+k[6]==-3)
  75. {
  76. line(2,4,6);
  77. return k[4];
  78. }
  79. if(k[1]+k[4]+k[7]==3||k[1]+k[4]+k[7]==-3)
  80. {
  81. line(1,4,7);
  82. return k[4];
  83. }
  84. if(k[3]+k[4]+k[5]==3||k[3]+k[4]+k[5]==-3)
  85. {
  86. line(3,4,5);
  87. return k[4];
  88. }
  89. if(ButtonsInGame==0)return 2;
  90. return NULL;
  91. }
  92. public String who_win(int stat)
  93. {
  94. if(stat==X)return "Win computer" ;
  95. if(stat==O)return "You win";
  96. if(stat==2)return "Tandoff";
  97. return null;
  98. }
  99. public String toStrTipe(int state)
  100. {
  101. if(state==1)return "X";
  102. if(state==-1)return "O";
  103. return "";
  104. }
  105. public void line(int a, int b, int c)
  106. {
  107. field[a].setContentAreaFilled(true);
  108. field[b].setContentAreaFilled(true);
  109. field[c].setContentAreaFilled(true);
  110. }
  111. public int empty_field(int player)
  112. {
  113. int n = (player==O)?-2:2;
  114. if(k[0]+k[1]+k[2]==n)
  115. {
  116. if(k[0]==0) return 0;
  117. if(k[1]==0) return 1;
  118. if(k[2]==0) return 2;
  119. }
  120. else if(k[3]+k[4]+k[5]==n)
  121. {
  122. if(k[3]==0) return 3;
  123. if(k[4]==0) return 4;
  124. if(k[5]==0) return 5;
  125. }
  126. else if(k[6]+k[7]+k[8]==n)
  127. {
  128. if(k[6]==0) return 6;
  129. if(k[7]==0) return 7;
  130. if(k[8]==0) return 8;
  131. }
  132. else if(k[0]+k[3]+k[6]==n)
  133. {
  134. if(k[0]==0) return 0;
  135. if(k[3]==0) return 3;
  136. if(k[6]==0) return 6;
  137. }
  138. else if(k[1]+k[4]+k[7]==n)
  139. {
  140. if(k[1]==0) return 1;
  141. if(k[4]==0) return 4;
  142. if(k[7]==0) return 7;
  143. }
  144. else if(k[2]+k[5]+k[8]==n)
  145. {
  146. if(k[2]==0) return 2;
  147. if(k[5]==0) return 5;
  148. if(k[8]==0) return 8;
  149. }
  150. else if(k[0]+k[4]+k[8]==n)
  151. {
  152. if(k[0]==0) return 0;
  153. if(k[4]==0) return 4;
  154. if(k[8]==0) return 8;
  155. }
  156. else if(k[6]+k[4]+k[2]==n)
  157. {
  158. if(k[6]==0) return 6;
  159. if(k[4]==0) return 4;
  160. if(k[2]==0) return 2;
  161. }
  162. return -1;
  163. }
  164. public void set_mass()
  165. {
  166. for(int ii=0;ii<9;ii++)
  167. {
  168. if(field[ii].getText().equals("X")) k[ii]=X;
  169. else
  170. if(field[ii].getText().equals("O")) k[ii]=O;
  171. else k[ii]=NULL;
  172. }
  173. }
  174. public Random rand = new Random();
  175. public int getRand(int lim){
  176. if(lim<1)return -1;
  177. return Math.abs(rand.nextInt(lim));
  178. }
  179. public int rand_field(){
  180. Vector <Integer> v = new Vector<Integer>();
  181. for(int i=0;i<9;i++)
  182. if(k[i]==0)v.add(i);
  183. return v.get(getRand(v.size()));
  184. }
  185. }

Решение задачи: «Ошибка в коде»

textual
Листинг программы
  1.  setState(i);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут