Ошибка - Java
Формулировка задачи:
Здравствуйте, имеется программа моделирования автономной матричной линейной последовательности машины (АМЛПМ) над полем GF(2). При вводе степени полиномов выдает ошибку, помогите разобраться:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3
at lasthope.matr.matrA(matr.java:13)
at lasthope.amlpm.actionPerformed(amlpm.java:188)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.*; public class amlpm extends Frame implements ActionListener, MouseListener { int sost=1; int m=0,n=0, pla=0, plb=0; int [][][]s=null; int [][]a=null; int [][]b=null; int prS=0, prA=0, prB=0, row=-1, column=-1; ScrollPane pnA,pnB,pnS; TextField rang; Frame w; MenuBar mb; Menu m0; List t1,t3; List t2, t4; Label l10; TextField tma,tmb, tms, psp, hm; Button b1, bcn,bcp; JTable mA, mB, mS=new JTable(); public static void main(String[] args) { amlpm a = new amlpm(); } public amlpm() throws HeadlessException { super(); w=new Frame("АМЛПМ"); System.out.println("Hello!"); w.setSize(700,550); w.setBackground(Color.orange); w.setLayout(null); rang=new TextField(); w.add(rang); rang.setBounds(535,75,50,20); w.add(new Label("Ранг начальной матрицы")).setBounds(485,50,150,20); b1=new Button("Вычислить"); w.add(b1); b1.setEnabled(false); b1.setBounds(520,110,80,25); b1.setBackground(Color.white); b1.setFont(new Font(("Times New Roman"),1,12)); b1.setForeground(Color.black); Label l1=new Label("Степень полинома А"); w.add(l1); l1.setBounds(20,50,150,20); t1=new List(); t1.add("2"); t1.add("3"); t1.add("4"); t1.add("5"); t1.add("6"); t1.add("7"); t1.add("8"); t1.add("9"); t1.add("10"); t1.add("11"); t1.add("12");t1.add("13");t1.add("14");t1.add("15");t1.add("16"); w.add(t1); t1.setBounds(30,75,70,20); Label l2=new Label("Коэффициенты полинома А"); w.add(l2); l2.setBounds(10,110,160,20); t2=new List(); w.add(t2); t2.setBounds(25,135,70,20); Label l3=new Label("Степень полинома В"); w.add(l3); l3.setBounds(280,50,150,20); t3=new List(); t3.add("2"); t3.add("3"); t3.add("4"); t3.add("5"); t3.add("6"); t3.add("7"); t3.add("8"); t3.add("9"); t3.add("10"); t3.add("11"); t3.add("12");t3.add("13");t3.add("14");t3.add("15");t3.add("16"); w.add(t3); t3.setBounds(295,75,70,20); Label l4=new Label("Коэффициенты полинома В"); w.add(l4); l4.setBounds(250,110,160,20); t4=new List(); w.add(t4); t4.setBounds(290,135,70,20); Label l5=new Label("Период матрицы А"); w.add(l5); l5.setBounds(10,170,150,20); tma=new TextField(); w.add(tma); tma.setBounds(25,190,70,20); Label l6=new Label("Период матрицы В"); w.add(l6); l6.setBounds(255,170,150,20); tmb=new TextField(); w.add(tmb); tmb.setBounds(290,190,70,20); Label l7=new Label("Период матрицы S"); w.add(l7); l7.setBounds(490,170,150,20); tms=new TextField(); w.add(tms); tms.setBounds(530,190,70,20); Label l8=new Label("матрица А"); w.add(l8); l8.setBounds(60,240,90,20); pnA=new ScrollPane(); w.add(pnA); pnA.setBounds(20,265,150,150); pnA.doLayout(); Label l9=new Label("матрица В"); w.add(l9); l9.setBounds(300,240,90,20); pnB=new ScrollPane(); w.add(pnB); pnB.setBounds(250,265,150,150); pnB.doLayout(); l10=new Label("матрица S[0]"); l10.setForeground(Color.red); w.add(l10); l10.setBounds(540,240,90,20); pnS=new ScrollPane(); w.add(pnS); pnS.setBounds(500,265,150,150); pnS.doLayout(); Label ll=new Label("Состояния"); ll.setFont(new Font("Times New Roman",1,13)); w.add(ll); ll.setBounds(540,420,120,20); bcn=new Button(">>"); w.add(bcn); bcn.setEnabled(false); bcn.setBounds(580,440,25,25); bcn.setBackground(Color.white); bcn.setForeground(Color.black); bcn.setFont(new Font("Times New Roman",0,13)); bcp=new Button("<<"); w.add(bcp); bcp.setEnabled(false); bcp.setBounds(540,440,25,25); bcp.setBackground(Color.white); bcp.setForeground(Color.black); bcp.setFont(new Font("Times New Roman",0,13)); Label hem=new Label("Вес Хэмминга"); w.add(hem); hem.setBounds(25,450,85,20); hm=new TextField(); w.add(hm); hm.setBounds(120,450,70,20); Label psl=new Label("ПСП"); w.add(psl); psl.setBounds(15,495,30,20); psp=new TextField(); psp.setForeground(Color.blue); w.add(psp); psp.setFont(new Font("Times New Roman",0,13)); psp.setBounds(50,495,470,23); w.setVisible(true); w.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent g) { w.dispose(); System.exit(0); } } ); t1.addMouseListener(this); t2.addMouseListener(this); t4.addMouseListener(this); t3.addMouseListener(this); b1.addActionListener(this); bcn.addActionListener(this); bcp.addActionListener(this); } public void actionPerformed(ActionEvent e){ if (e.getActionCommand().equals("Вычислить")){ sost=0; if (n!=0) { if (t2.getSelectedItem()!=null){ pla=Integer.parseInt(t2.getSelectedItem().substring(0,t2.getSelectedItem().length()-1)); a=matr.matrA(n,pla); mA=new JTable(n,n); mA.setGridColor(Color.blue); mA.setIgnoreRepaint(true); mA.doLayout(); mA.setEnabled(false); mA.setIntercellSpacing(new Dimension(3,3)); mA.setRowHeight(20); mA.sizeColumnsToFit(37); for (int i=0;i<n;i++) for (int j=0;j<n;j++){ String str=Integer.toString(a[i][j]); mA.setValueAt(str,i,j);} pnA.removeAll(); pnA.add(mA); pnA.doLayout(); prA=matr.period(a); tma.setText(Integer.toString(prA)); } else msg("Не выбраны коэффициенты полинома A"); } if (m!=0) if (t4.getSelectedItem()!=null){ plb=Integer.parseInt(t4.getSelectedItem().substring(0,t4.getSelectedItem().length()-1)); b=matr.matrB(m,plb); mB=new JTable(m,m); mB.setGridColor(Color.blue); mB.setIntercellSpacing(new Dimension(3,3)); mB.setIgnoreRepaint(true); mB.doLayout(); mB.setEnabled(false); mB.setRowHeight(20); mB.sizeColumnsToFit(7); String str=""; for (int i=0;i<m;i++) for (int j=0;j<m;j++){ str=Integer.toString(b[i][j]); mB.setValueAt(str,i,j); } pnB.removeAll(); pnB.add(mB); pnB.doLayout(); prB=matr.period(b); tmb.setText(Integer.toString(prB)); } else msg("Не выбраны коэффициенты полинома B"); int rg=0; boolean rr=false; if (!rang.getText().isEmpty()){ rg=Integer.parseInt(rang.getText()); if ((rg>n)&(rg>m)) msg("Ранг превышает размер матрицы"); else rr=true; } else msg("Введите ранг!"); if ((n!=0)&(m!=0)&(rr==true)){ l10.setText("матрица S[0]"); String str; int kf=0; if (m*n>100) kf=750; if ((m*n>60)&(m*n<100)) kf=1400; if (m*n<60) kf=1700; s=new int[kf*m*n][n][m]; s[0]=matr.matrS0(n,m,rg); mS=new JTable(n,m); mS.setFont(new Font("Times New Roman",1,14)); mS.setSelectionBackground(Color.yellow); mS.setCellSelectionEnabled(true); mS.addMouseListener(this); mB.setIgnoreRepaint(true); mS.doLayout(); mS.setGridColor(Color.red); mS.setIgnoreRepaint(true); mS.setRowHeight(20); mS.sizeColumnsToFit(307); mS.setIntercellSpacing(new Dimension(5,5)); for (int i=0;i<n;i++) for (int j=0;j<m;j++){ str=Integer.toString(s[0][i][j]); mS.setValueAt(str,i,j); } pnS.removeAll(); pnS.add(mS); pnS.doLayout(); } if ((a!=null)&(b!=null)&(s!=null)){ for (int k=1;;k++){ s[k]=matr.product(a,b,s[k-1]); int pr=0; for (int i=0;i<a.length;i++) for (int j=0;j<b.length;j++) if (s[k][i][j]==s[0][i][j]) pr++; if (pr==a.length*b.length) {prS=k; break;} } bcn.setEnabled(true); if (prS!=0) tms.setText(Integer.toString(prS)); } } if (e.getActionCommand().equals(">>")){ if ((s[0]!=null)&(a!=null)&(b!=null)&(sost<prS)){ sost++; String str; mS.removeAll(); mS.setForeground(new Color((17+sost*30)%256 ,(6+sost*20)%256,(3+sost*35)%256)); System.out.println("sost="+sost); for (int i=0;i<n;i++) for (int j=0;j<m;j++){ str=Integer.toString(s[sost][i][j]); mS.setValueAt(str,i,j); } l10.setText("матрица S["+sost+"]"); l10.setForeground(Color.red); } } if (e.getActionCommand().equals("<<")){ if ((s[1]!=null)&(sost>0)){ String str; sost--; mS.removeAll(); for (int i=0;i<n;i++) for (int j=0;j<m;j++){ str=Integer.toString(s[sost][i][j]); mS.setValueAt(str,i,j); } l10.setText("матрица S["+sost+"]"); } } if (sost>0) bcp.setEnabled(true); else bcp.setEnabled(false); if (sost>=prS-1) bcn.setEnabled(false); else bcn.setEnabled(true); } public static void koeff (int n, List t){ if (n==2) t.add("7H"); if (n==3) t.add("13F"); if (n==4){ t.add("23F"); t.add("37D"); } if (n==5){ t.add("45E"); t.add("75G"); t.add("67H"); } if (n==6){ t.add("103F"); t.add("127B"); t.add("147H"); t.add("111A"); } if (n==7){ t.add("211E"); t.add("217E"); t.add("235E"); } if (n==8){ t.add("435E"); t.add("567B"); t.add("763D"); } if (n==9){ t.add("1021E"); t.add("1131E"); t.add("1461G"); } if (n==10){ t.add("2011E"); t.add("2017B"); t.add("2415E"); } if (n==11){ t.add("4005E"); t.add("4445E"); t.add("4215E"); t.add("4757B"); } if (n==12){ t.add("10123F"); t.add("12133B"); t.add("10115A"); } } public void mouseClicked (MouseEvent g){ psp.setText(""); hm.setText(""); if (g.getComponent()==t1){ if (mA!=null) pnA.removeAll(); if (mS!=null) pnS.removeAll(); t2.removeAll(); n=Integer.parseInt(t1.getSelectedItem()); koeff(n,t2); } if (g.getComponent()==t3){ if (mB!=null) pnB.removeAll(); if (mS!=null) pnS.removeAll(); t4.removeAll(); m=Integer.parseInt(t3.getSelectedItem()); koeff(m,t4); } if ((n!=0)&(m!=0)) b1.setEnabled(true); if (g.getComponent()==mS){ psp.setText(""); hm.setText(""); int psl[]=null; if (mS!=null){ row=mS.getSelectedRow(); column=mS.getSelectedColumn(); if ((row!=-1)&(column!=-1)) psl=posl.posled(s,prS,row,column); String str=""; if (psl!=null){ for (int i=0;i<psl.length;i++) str=str+psl[i]; psp.setText(str); int hem=posl.hemming(psl); hm.setText(Integer.toString(hem));}} } } boolean ind; public void msg(String text){ final Dialog d=new Dialog(w); d.setBackground(Color.red); d.setSize(260,80); d.setLocation(100,100); d.setLayout(null); Label l=new Label(text); d.add(l); l.setBounds(10,28,240,20); final Button b=new Button("OK"); d.add(b); d.setBackground(Color.yellow); b.setBounds(90,53,50,20); b.setBackground(Color.white); if (ind==false) d.setVisible(true); ind=true; b.addActionListener(new ActionListener(){ public void actionPerformed (ActionEvent r){ if (r.getSource()==b) {d.dispose(); ind=false;}}}); } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }
Решение задачи: «Ошибка»
textual
Листинг программы
public class posl { public posl() { super();} public static int[] posled (int s[][][], int size, int row, int column){ // генерация ПСП int psl[]=new int[size]; for (int k=0;k<size;k++) for (int i=0;i<s[k].length;i++) for (int j=0;j<s[k][i].length;j++) if ((i==row)&(j==column)) psl[k]=s[k][i][j]; return psl; } public static int hemming (int[]psl){ // вычисление веса Хэмминга int k=0; for (int i=0;i<psl.length;i++) if (psl[i]==1) k++; return k; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д