package PhotoConnectGame;import java.util.Random;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class PhotoConnectGameUI extends JFrame 
 {private final int NUMBER_BUTTON = 8;
 private JTextField display;
 private JLabel label;
 private JButton button_start,button_end;
JButton b[] = new JButton[NUMBER_BUTTON];
private JPanel panel,panel1,panel2,panel3;
private int array[]={1,2,4,3,5,6,7,0};
private int a,c,d,e,f,g,h,i;
private void Random(int array[])
  {
Random random = new Random();
for(int i = 7; i >= 0; i--)
{
int j = random.nextInt(i);
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}

int a=array[0];
int i=array[1];
int c=array[2];
int d=array[3];
int e=array[4];
int f=array[5];
int g=array[6];
int h=array[7];  }
 
 public  PhotoConnectGameUI()
 {
  super("图形配对游戏");
  this.setSize(500,480);
  this.setLocation(300,100);
 this.setLayout(new GridLayout(3,1,0,30));
 JPanel panel=new JPanel(new GridLayout(1,4,10,10));
 JPanel panel1=new JPanel(new GridLayout(1,4,10,10));
 JPanel panel2=new JPanel(new FlowLayout(FlowLayout.CENTER,30,0));
 JPanel panel3=new JPanel(new FlowLayout(FlowLayout.LEFT,30,0));
this.add(panel,BorderLayout.NORTH);
this.add(panel1,BorderLayout.CENTER);
this.add(panel2,BorderLayout.SOUTH);

//Random(array);

b[a] = new JButton(new ImageIcon(Resource.getImgResource("/1.gif")));
       
 
  b[i] = new JButton(new ImageIcon(Resource.getImgResource("/0.gif")));
       
  b[c] = new JButton(new ImageIcon(Resource.getImgResource("/2.gif")));
       
  b[d] = new JButton(new ImageIcon(Resource.getImgResource("/3.gif")));
       
  b[e]= new JButton(new ImageIcon(Resource.getImgResource("/0.gif")));
        
  b[f]= new JButton(new ImageIcon(Resource.getImgResource("/2.gif")));
       
  b[g]=new JButton(new ImageIcon(Resource.getImgResource("/1.gif")));
        
  b[h]=new JButton(new ImageIcon(Resource.getImgResource("/3.gif")));
    
       
        for(int i=0;i<4;i++)
        {
         panel1.add(b[i]);
        }
        for (int j =4;j<8;j++)
        {
         panel.add(b[j]);
        }  label=new JLabel("已经点击:");
  this.add(label);
    panel3.add(label);
  display=new JTextField(8);
  this.add(display,FlowLayout.CENTER);
 panel3.add(display);
  panel2.add(panel3);
  button_start=new JButton("开始");
  this.add(button_start,FlowLayout.CENTER);
 panel2.add(button_start);
  button_end=new JButton("结束");
  this.add(button_end,FlowLayout.RIGHT);
panel2.add(button_end);
 
 
 this.setResizable(false);
 
  this.setVisible(true);
  addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent i)
{
System.exit(0);
}
});
  
  }
 
  public static void main(String arg[])
  {
   new PhotoConnectGameUI();
  }
}这个程序是讲:
有8张图片,背面的图案都相同,正面有四种图案,每种图案有两张。开始时,8张图片都是背面朝上排列,界面上有[开始]及[结束]按钮,还有一个文本框记录点击图片的次数。点击[开始],8张图片都是背面朝上,并每次随机排列,游戏开始:点击图片,第一次点击的图片会自动翻开,第二次点击图片时,系统判断与上一次打开的图片的图案是否相同,如果相同,则图片打开,如果不同,上一次打开的图片有会扣下。重复这个过程,直到所有的图片都打开,或按[开始]及[结束]按钮。
现在我卡在随机排列上。编译无错,运行时提示:
Exception in thread "main" java.lang.IllegalArgumentException: n must be positiveat java.util.Random.nextInt<Random.java:250>
at PhotoConnectGame.PhotoConnectGameUI.random<PhotoConnectGameUI.java.22>
at 
PhotoConnectGame.PhotoConnectGameUI.<init><PhotoConnectGameUI.java:53>
at
PhotoConnectGame.PhotoConnectGameUI.main(PhotoConnectGameUI.java:112>这是random函数出错,我的思路是先给数组赋值,然后交换达到随机排列的效果,请教错误原因,然后该怎么改。
注释掉随机排列后,运行时出错,提示:Exception in thread "main" java.lang.NullPointerExceptionat java.awt.Container.addImpl<Container.java:1027>
at java.awt.Container.add<Container.java:935>
at javax.swing.JFrame.addImpl<JFrame.java:545>
at java.awt.Container.add<Container.java:352>
at PhotoConnectGame.PhotoConnectGameUI.<init><PhotoConnectGameUI>
at PhotoConnectGame.PhotoConnectGameUI.main<PhotoConnectGameUI.java:120>不可以创建按钮以后添加到面板中吗?该怎么改?

解决方案 »

  1.   

    package PhotoConnectGame; import java.util.Random; 
    import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; public class PhotoConnectGameUI extends JFrame 
    {private final int NUMBER_BUTTON = 8; 
    private JTextField display; 
    private JLabel label; 
    private JButton button_start,button_end; 
    JButton b[] = new JButton[NUMBER_BUTTON]; 
    private JPanel panel,panel1,panel2,panel3; 
    private int array[]={1,2,4,3,5,6,7,0}; 
    private int a,c,d,e,f,g,h,i; 
    private void Random(int array[]) 
      { 
    Random random = new Random(); 
    for(int i = 7; i >= 0; i--) 

    int j = random.nextInt(i); ///这里,参数不能是int,必须是long
    int temp = array[j]; 
    array[j] = array[i]; 
    array[i] = temp; 
    } int a=array[0]; 
    int i=array[1]; 
    int c=array[2]; 
    int d=array[3]; 
    int e=array[4]; 
    int f=array[5]; 
    int g=array[6]; 
    int h=array[7];   } public  PhotoConnectGameUI() 

    super("图形配对游戏"); 
    this.setSize(500,480); 
    this.setLocation(300,100); 
    this.setLayout(new GridLayout(3,1,0,30)); 
    JPanel panel=new JPanel(new GridLayout(1,4,10,10)); 
    JPanel panel1=new JPanel(new GridLayout(1,4,10,10)); 
    JPanel panel2=new JPanel(new FlowLayout(FlowLayout.CENTER,30,0)); 
    JPanel panel3=new JPanel(new FlowLayout(FlowLayout.LEFT,30,0)); 
    this.add(panel,BorderLayout.NORTH); 
    this.add(panel1,BorderLayout.CENTER); 
    this.add(panel2,BorderLayout.SOUTH); //Random(array); b[a] = new JButton(new ImageIcon(Resource.getImgResource("/1.gif"))); 
          b[i] = new JButton(new ImageIcon(Resource.getImgResource("/0.gif"))); 
          
    b[c] = new JButton(new ImageIcon(Resource.getImgResource("/2.gif"))); 
          
    b[d] = new JButton(new ImageIcon(Resource.getImgResource("/3.gif"))); 
          
    b[e]= new JButton(new ImageIcon(Resource.getImgResource("/0.gif"))); 
            
    b[f]= new JButton(new ImageIcon(Resource.getImgResource("/2.gif"))); 
          
    b[g]=new JButton(new ImageIcon(Resource.getImgResource("/1.gif"))); 
            
    b[h]=new JButton(new ImageIcon(Resource.getImgResource("/3.gif"))); 
        
          
            for(int i=0;i <4;i++) 
            { 
            panel1.add(b[i]);/////你的b好多没被赋值,检查你自己是怎么赋值的 
            } 
            for (int j =4;j <8;j++) 
            { 
            panel.add(b[j]); 
            } label=new JLabel("已经点击:"); 
    this.add(label); 
        panel3.add(label); 
    display=new JTextField(8); 
    this.add(display,FlowLayout.CENTER); 
    panel3.add(display); 
    panel2.add(panel3); 
    button_start=new JButton("开始"); 
    this.add(button_start,FlowLayout.CENTER); 
    panel2.add(button_start); 
    button_end=new JButton("结束"); 
    this.add(button_end,FlowLayout.RIGHT); 
    panel2.add(button_end); 
    this.setResizable(false); this.setVisible(true); 
      addWindowListener(new WindowAdapter() 

    public void windowClosing(WindowEvent i) 

    System.exit(0); 

    }); 
      
      }   public static void main(String arg[]) 
      { 
      new PhotoConnectGameUI(); 
      } 
    } 这个程序是讲: 
    有8张图片,背面的图案都相同,正面有四种图案,每种图案有两张。开始时,8张图片都是背面朝上排列,界面上有[开始]及[结束]按钮,还有一个文本框记录点击图片的次数。点击[开始],8张图片都是背面朝上,并每次随机排列,游戏开始:点击图片,第一次点击的图片会自动翻开,第二次点击图片时,系统判断与上一次打开的图片的图案是否相同,如果相同,则图片打开,如果不同,上一次打开的图片有会扣下。重复这个过程,直到所有的图片都打开,或按[开始]及[结束]按钮。 
    现在我卡在随机排列上。 编译无错,运行时提示: 
    Exception in thread "main" java.lang.IllegalArgumentException: n must be positive at java.util.Random.nextInt <Random.java:250> 
    at PhotoConnectGame.PhotoConnectGameUI.random <PhotoConnectGameUI.java.22> 
    at 
    PhotoConnectGame.PhotoConnectGameUI. <init> <PhotoConnectGameUI.java:53> 
    at 
    PhotoConnectGame.PhotoConnectGameUI.main(PhotoConnectGameUI.java:112> 这是random函数出错,我的思路是先给数组赋值,然后交换达到随机排列的效果,请教错误原因,然后该怎么改。 
    注释掉随机排列后,运行时出错,提示: Exception in thread "main" java.lang.NullPointerException at java.awt.Container.addImpl <Container.java:1027> 
    at java.awt.Container.add <Container.java:935> 
    at javax.swing.JFrame.addImpl <JFrame.java:545> 
    at java.awt.Container.add <Container.java:352> 
    at PhotoConnectGame.PhotoConnectGameUI. <init> <PhotoConnectGameUI> 
    at PhotoConnectGame.PhotoConnectGameUI.main <PhotoConnectGameUI.java:120>