import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.*;
class WindowGrid extends JFrame implements ActionListener
{
JButton buttonarray[]; //前部按钮
JLabel label[];
JButton buttonzero; //清零按钮
JButton buttonrandom; //随机按钮
JButton buttoncode; //编码按钮
int fx[]; //用来存储F(x)*x的K次方的0,1序列
int gx[]; //用来存储G(x)0,1序列
int save[];
int sign;
int step;
WindowGrid(String s)
{
super(s);
Container contenetPane = this.getContentPane();
GridLayout grid = new GridLayout(2,14);
contenetPane.setLayout(grid); //设置窗口的布局
buttonarray = new JButton[16];
label = new JLabel[13];
buttonzero = new JButton("清零");
buttonrandom = new JButton("随机");
buttoncode = new JButton("编码");
fx = new int[15];
save = new int[15];
gx = new int[15];
for (int i = 0;i < 16;i++) //为每个实例开辟内存空间
{
buttonarray[i] = new JButton("0");
buttonarray[i].addActionListener(this);
contenetPane.add(buttonarray[i]);
}
for (int i = 0;i < 13;i++)
{
label[i] = new JLabel();
contenetPane.add(label[i]);
}
label[0].setText("选定的多");
label[1].setText("项式比特");
label[2].setText("序列为:");
label[3].setText("110101");
label[10].setText("编码结果");
sign = 0;
step = 0;
gx[0] = 1;
gx[1] = 1;
gx[2] = 0;
gx[3] = 1;
gx[4] = 0;
gx[5] = 1;
for (int i = 6;i < 15;i++)
{
gx[i] = 0;
}
contenetPane.add(buttonzero);
buttonzero.addActionListener(this);
contenetPane.add(buttonrandom);
buttonrandom.addActionListener(this);
contenetPane.add(buttoncode);
buttoncode.addActionListener(this);
contenetPane.validate();
setBounds(0,200,1000,200); //x,y,kuan,gao
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) //事件查看机制
{
if (e.getSource() == buttonrandom) //随机按钮被触发
{
for (int i = 0;i < 10;i++)
{
buttonarray[i].setText(""+random());
}
}
if (e.getSource() == buttonzero) //清零按钮被触发
{
for (int i = 0;i < 16;i++)
{
buttonarray[i].setText("0");
}
}
for (int i = 0;i < 10;i++) //查看是哪个按钮被触发
{
if (e.getSource() == buttonarray[i])
{
if (buttonarray[i].getText() == "0") //反向显示
{
buttonarray[i].setText("1");
break;
}
else
{
buttonarray[i].setText("0");
break;
}
}
}
if (e.getSource() == buttoncode) //编码按钮被触发
{
System.out.println("");
reset(gx); //把选定的多项式比特序列重新设置
for (int i = 0;i < 10;i++) //获得按钮此时的0,1序列值
{
fx[i] = Integer.parseInt(buttonarray[i].getText());
save[i] = fx[i];
}
for (int i = 10;i < 15;i++) //后面为5个0
{
fx[i] = 0;
save[i] = fx[i];
}
getarithmeticalcompliment(fx,gx); //得到余数
for (int i = 0;i < 15;i++)
{
save[i] = save[i] + fx[i]; //加上计算完后的余数
buttonarray[i].setText(""+save[i]);
}
}
}
public int random() //产生0-1之间的随机数
{
return (int) (Math.random()+0.5);
}
//运用递归运算找出结果
public void getarithmeticalcompliment(int[] up,int[] down) //得到余数
{
while (true) //还没有算完
{
step = sign;
sign = 0;
for (int i = 0;i < 15;i++) //确定GX应该移位几次
{
if (up[i] == 1) //从左向右搜索找第一个是一的项
{
i = 16;
}
else if (up[i] == 0) //如果为0的话
{
sign++; //否则记下当前最前面有几个0
}
}
if (sign <= 9) //得到余数的条件
{
step = sign - step; //这才是当前要移动的步数
move(gx,step); //把GX移动相应的步数
for (int i = 0;i < 15;i++)
{
up[i] = up[i]^down[i]; //执行异或操作
}
}
else
{
break;
}
}
}
public void move(int[] temp,int num) //移动位置操作
{
int save[];
int i,j; //num为移位次数
save = new int[15];
for (j = 0;j < num;j++)
{
for (i = 0;i < 14;i++)
{
save[i+1] = temp[i];
}
save[0] = temp[i]; //把最后一个放入第一个
for (i = 0;i < 15;i++) //字符整体赋值
{
temp[i] = save[i];
}
}
}
public void reset(int[] down) //重新设置GX中的内容
{
down[0] = 1;
down[1] = 1;
down[2] = 0;
down[3] = 1;
down[4] = 0;
down[5] = 1;
for (int i = 6;i < 15;i++)
{
down[i] = 0;
}
}
}
class ParityCheck
{
public static void main(String args[])
{
WindowGrid win = new WindowGrid("CRC校验测试");
}
}
import javax.swing.*;
import java.awt.event.*;
import java.lang.*;
class WindowGrid extends JFrame implements ActionListener
{
JButton buttonarray[]; //前部按钮
JLabel label[];
JButton buttonzero; //清零按钮
JButton buttonrandom; //随机按钮
JButton buttoncode; //编码按钮
int fx[]; //用来存储F(x)*x的K次方的0,1序列
int gx[]; //用来存储G(x)0,1序列
int save[];
int sign;
int step;
WindowGrid(String s)
{
super(s);
Container contenetPane = this.getContentPane();
GridLayout grid = new GridLayout(2,14);
contenetPane.setLayout(grid); //设置窗口的布局
buttonarray = new JButton[16];
label = new JLabel[13];
buttonzero = new JButton("清零");
buttonrandom = new JButton("随机");
buttoncode = new JButton("编码");
fx = new int[15];
save = new int[15];
gx = new int[15];
for (int i = 0;i < 16;i++) //为每个实例开辟内存空间
{
buttonarray[i] = new JButton("0");
buttonarray[i].addActionListener(this);
contenetPane.add(buttonarray[i]);
}
for (int i = 0;i < 13;i++)
{
label[i] = new JLabel();
contenetPane.add(label[i]);
}
label[0].setText("选定的多");
label[1].setText("项式比特");
label[2].setText("序列为:");
label[3].setText("110101");
label[10].setText("编码结果");
sign = 0;
step = 0;
gx[0] = 1;
gx[1] = 1;
gx[2] = 0;
gx[3] = 1;
gx[4] = 0;
gx[5] = 1;
for (int i = 6;i < 15;i++)
{
gx[i] = 0;
}
contenetPane.add(buttonzero);
buttonzero.addActionListener(this);
contenetPane.add(buttonrandom);
buttonrandom.addActionListener(this);
contenetPane.add(buttoncode);
buttoncode.addActionListener(this);
contenetPane.validate();
setBounds(0,200,1000,200); //x,y,kuan,gao
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) //事件查看机制
{
if (e.getSource() == buttonrandom) //随机按钮被触发
{
for (int i = 0;i < 10;i++)
{
buttonarray[i].setText(""+random());
}
}
if (e.getSource() == buttonzero) //清零按钮被触发
{
for (int i = 0;i < 16;i++)
{
buttonarray[i].setText("0");
}
}
for (int i = 0;i < 10;i++) //查看是哪个按钮被触发
{
if (e.getSource() == buttonarray[i])
{
if (buttonarray[i].getText() == "0") //反向显示
{
buttonarray[i].setText("1");
break;
}
else
{
buttonarray[i].setText("0");
break;
}
}
}
if (e.getSource() == buttoncode) //编码按钮被触发
{
System.out.println("");
reset(gx); //把选定的多项式比特序列重新设置
for (int i = 0;i < 10;i++) //获得按钮此时的0,1序列值
{
fx[i] = Integer.parseInt(buttonarray[i].getText());
save[i] = fx[i];
}
for (int i = 10;i < 15;i++) //后面为5个0
{
fx[i] = 0;
save[i] = fx[i];
}
getarithmeticalcompliment(fx,gx); //得到余数
for (int i = 0;i < 15;i++)
{
save[i] = save[i] + fx[i]; //加上计算完后的余数
buttonarray[i].setText(""+save[i]);
}
}
}
public int random() //产生0-1之间的随机数
{
return (int) (Math.random()+0.5);
}
//运用递归运算找出结果
public void getarithmeticalcompliment(int[] up,int[] down) //得到余数
{
while (true) //还没有算完
{
step = sign;
sign = 0;
for (int i = 0;i < 15;i++) //确定GX应该移位几次
{
if (up[i] == 1) //从左向右搜索找第一个是一的项
{
i = 16;
}
else if (up[i] == 0) //如果为0的话
{
sign++; //否则记下当前最前面有几个0
}
}
if (sign <= 9) //得到余数的条件
{
step = sign - step; //这才是当前要移动的步数
move(gx,step); //把GX移动相应的步数
for (int i = 0;i < 15;i++)
{
up[i] = up[i]^down[i]; //执行异或操作
}
}
else
{
break;
}
}
}
public void move(int[] temp,int num) //移动位置操作
{
int save[];
int i,j; //num为移位次数
save = new int[15];
for (j = 0;j < num;j++)
{
for (i = 0;i < 14;i++)
{
save[i+1] = temp[i];
}
save[0] = temp[i]; //把最后一个放入第一个
for (i = 0;i < 15;i++) //字符整体赋值
{
temp[i] = save[i];
}
}
}
public void reset(int[] down) //重新设置GX中的内容
{
down[0] = 1;
down[1] = 1;
down[2] = 0;
down[3] = 1;
down[4] = 0;
down[5] = 1;
for (int i = 6;i < 15;i++)
{
down[i] = 0;
}
}
}
class ParityCheck
{
public static void main(String args[])
{
WindowGrid win = new WindowGrid("CRC校验测试");
}
}