📄 encode.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.util.*;
import java.io.*;
public class encode
{
private String lineSep;
private int a;
private int b;
private String plainText;
private String codeText;
private JFrame mframe;
private Container mc;
private JLabel al;
private JLabel bl;
private JLabel pexplain;
private JLabel cexplain;
private JLabel statisticExplain1;
private JLabel statisticExplain2;
private JTextField atxt;
private JTextField btxt;
private JTextField plainContainer;
private JTextField codeContainer;
private JTextField statisticContainer1;
private JTextField statisticContainer2;
JButton submit;
JButton decode;
ArrayList<myMap> p;
ArrayList<myMap> c;
JTextField caution;
JLabel cau;
JPanel j1;
JPanel j2;
JPanel j3;
JPanel j4;
JPanel j5,j6,j7;
public void show()
{
al=new JLabel("parameter a=");
bl=new JLabel("parameter b=");
atxt=new JTextField(2);
btxt=new JTextField(2);
pexplain=new JLabel("Input the plain text:");
cexplain=new JLabel("After encoded:");
plainContainer=new JTextField(50);
codeContainer=new JTextField(50);
submit=new JButton("enCode");
decode=new JButton("deCode");
statisticExplain1=new JLabel("plain Statistic:");
statisticExplain2=new JLabel("code Statistic:");
statisticContainer1=new JTextField(50);
statisticContainer2=new JTextField(50);
cau=new JLabel(" message ");
caution=new JTextField(50);
p=new ArrayList<myMap>(26);
c=new ArrayList<myMap>(26);
for(int i=0;i<26;i++)
{
p.add(new myMap((char)('a'+i),0));
c.add(new myMap((char)('a'+i),0));
}
plainText=null;
codeText=null;
a=-1;
b=-1;
lineSep=";";
mframe=new JFrame("CodeHelper");
mframe.setSize(800,200);
mframe.setVisible(true);
mc=mframe.getContentPane();
j1=new JPanel();
j2=new JPanel();
j3=new JPanel();
j4=new JPanel();
j5=new JPanel();
j6=new JPanel();
j7=new JPanel();
j1.setLayout(new BoxLayout(j1,BoxLayout.Y_AXIS));
j1.add(al);
j1.add(bl);
mc.add(j1);
j2.setLayout(new BoxLayout(j2,BoxLayout.Y_AXIS));
j2.add(atxt);
j2.add(btxt);
mc.add(j2);
j3.setLayout(new BoxLayout(j3,BoxLayout.Y_AXIS));
j3.add(pexplain);
j3.add(cexplain);
mc.add(j3);
j4.setLayout(new BoxLayout(j4,BoxLayout.Y_AXIS));
j4.add(plainContainer);
j4.add(codeContainer);
mc.add(j4);
j5.setLayout(new BoxLayout(j5,BoxLayout.Y_AXIS));
j5.add(statisticExplain1);
j5.add(statisticExplain2);
j5.add(cau);
mc.add(j5);
j6.setLayout(new BoxLayout(j6,BoxLayout.Y_AXIS));
j6.add(statisticContainer1);
j6.add(statisticContainer2);
j6.add(caution);
mc.add(j6);
j7.setLayout(new BoxLayout(j7,BoxLayout.Y_AXIS));
j7.add(submit);
j7.add(decode);
mc.add(j7);
caution.setEditable(false);
mframe.setLayout(new FlowLayout());
}
public void addlistener()
{
mframe.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
submit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent sa)
{
try{
a=Integer.parseInt(atxt.getText());
a=(a%26+26)%26;
b=Integer.parseInt(btxt.getText());
b=(b%26+26)%26;
}catch(Exception e)
{
caution.setText(atxt.getText()+" or "+btxt.getText()+"is not number");
a=-1;
b=-1;
atxt.setText("");
btxt.setText("");
plainContainer.setText("");
codeContainer.setText("");
statisticContainer1.setText("");
statisticContainer2.setText("");
return;
}
if(gcd(a,26)!=1)
{
caution.setText(a+" is not a illegal number!");
atxt.setText("");
a=-1;
plainContainer.setText("");
codeContainer.setText("");
statisticContainer1.setText("");
statisticContainer2.setText("");
return;
}
plainText=plainContainer.getText(); //System.out.println("a:"+plainText);
if(plainText!=""&&plainText!=null&&a>=0&&b>=0)
{
//System.out.println("a= "+a+"; b= "+b);
codeText=transform(a,b,plainText.trim());
codeContainer.setText(codeText);
StringBuffer ps=new StringBuffer();
//ps.append("plainText Statistic:");
for(int i=0;i<26;i++)
{
if(p.get(i).rate!=0)
{
ps.append(" "+p.get(i).ch+" : "+(double)p.get(i).rate/(plainText.length())+lineSep);
}
p.get(i).rate=0;
}
statisticContainer1.setText(ps.toString());
ps=new StringBuffer();
//ps.append("codeText Statistic:");
for(int i=0;i<26;i++)
{
if(c.get(i).rate!=0)
{
ps.append(" "+c.get(i).ch+" : "+(double)c.get(i).rate/(plainText.length())+lineSep);
}
c.get(i).rate=0;
}
statisticContainer2.setText(ps.toString());
caution.setText("work well!");
}
else
{
caution.setText("error in prameter a or b or plaintext!");
atxt.setText("");
btxt.setText("");
}
}
});
decode.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent sa)
{
try{
a=Integer.parseInt(atxt.getText());
a=(a%26+26)%26;
b=Integer.parseInt(btxt.getText());
b=(b%26+26)%26;
}catch(Exception e)
{
caution.setText(atxt.getText()+" or "+btxt.getText()+" is not number");
a=-1;
b=-1;
atxt.setText("");
btxt.setText("");
plainContainer.setText("");
codeContainer.setText("");
statisticContainer1.setText("");
statisticContainer2.setText("");
return;
}
if(gcd(a,26)!=1)
{
caution.setText(a+" is a illegal number!");
atxt.setText("");
a=-1;
plainContainer.setText("");
codeContainer.setText("");
statisticContainer1.setText("");
statisticContainer2.setText("");
return;
}
codeText=codeContainer.getText(); //System.out.println("b:"+codeText);
if(codeText!=""&&codeText!=null&&a>=0&&b>=0)
{
//System.out.println("a= "+a+"; b= "+b);
plainText=atransform(a,b,codeText.trim());
plainContainer.setText(plainText);
StringBuffer ps=new StringBuffer();
//ps.append("plainText Statistic:");
for(int i=0;i<26;i++)
{
if(p.get(i).rate!=0)
{
ps.append(" "+p.get(i).ch+" : "+(double)p.get(i).rate/(plainText.length())+lineSep);
}
p.get(i).rate=0;
}
statisticContainer1.setText(ps.toString());
ps=new StringBuffer();
//ps.append("codeText Statistic:");
for(int i=0;i<26;i++)
{
if(c.get(i).rate!=0)
{
ps.append(" "+c.get(i).ch+" : "+(double)c.get(i).rate/(plainText.length())+lineSep);
}
c.get(i).rate=0;
}
statisticContainer2.setText(ps.toString());
caution.setText("work well!");
}
else
{
caution.setText("error in prameter a or b or plaintext!");
atxt.setText("");
btxt.setText("");
}
}
});
}
public static void main(String args[])
{
encode e=new encode();
e.show();
e.addlistener();
}
public String transform(int a,int b,String text)
{
int len=text.length();
char buff[]=text.toLowerCase().toCharArray();
for(int i=0;i<len;i++)
{
if(buff[i]>='a'&&buff[i]<='z'){
p.get(buff[i]-'a').rate+=1;
buff[i]=(char)(((buff[i]-'a')*a+b)%26+'a');
c.get(buff[i]-'a').rate+=1;
}
}
return new String(buff);
}
public int gcd(int a,int b)
{
if(a>=0&&b>=0)
{
int r=a%b;
while(r!=0)
{
a=b;b=r;
r=a%b;
}
return b;
}
return -1;
}
public String atransform(int a,int b,String text)
{
int len=text.length();
char buff[]=text.toLowerCase().toCharArray();
for(int i=0;i<len;i++)
{
if(buff[i]>='a'&&buff[i]<='z')
{
c.get(buff[i]-'a').rate+=1;
buff[i]=(char)(((((buff[i]-'a')-b)%26+26)%26*rev(a,26)%26)+'a');
p.get(buff[i]-'a').rate+=1;
}
}
return new String(buff);
}
public int rev(int p,int q)
{
if(gcd(p,q)==1)
{
int k=1;
while((q*k+1)%p!=0)
{
k++;
}
return (q*k+1)/p;
}
return -1;
}
class myMap{
public myMap(char ch,int rate){
this.ch=ch;
this.rate=rate;
}
public char ch;
public int rate;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -