Bom dia galera, ai vai a jaca que eu to tentando resolver, sou iniciante meeesmo,
agradeço mto se alguem ai puder me ajudar.
Um quebra costela a todos.
Li que este erro deve-se ao fato de que estou tentando ler uma posição nula, mas não sei como tratar esse erro e conseguir ler as posições sem problemas.
isso acontece pq em um determinano momente vc não tem um botão dentro do teu array
ou seja nessa posição ele é null
se vc fizer uma chamada null.setText("") = NullPointer
Boster
É o seguinte to programando um sudoku.
Eu gero valores aleatórios para criar uma matriz inicial do sudoku, ai chamo essa função para verificar se existe números repetidos na linha e na coluna (ainda não verifico o quadrante menor), ex.: no botao[4][5] eu tenho o numero 2, ai eu verifico se na linha 4 existe repetição do numero 2 e na coluna 5 existe repetição do número 2, se existe,
eu pego essa posição e coloco '" ".
M
miguel.satriani
voce adiciona os botões dentro da matriz em outro lugar?
Boster
Não. Eu só manipulo ela.
vou colocar o código completo aqui embaixo.
importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.BorderFactory;importjavax.swing.JOptionPane;importjavax.swing.JMenuBar;importjavax.swing.JMenu;importjavax.swing.JMenuItem;importjava.awt.GridLayout;importjava.awt.Color;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;importjava.lang.String;publicclassSudokuextendsJFrameimplementsActionListener{/*Declaração de atributos da classe*/privateJButton[][]botao=newJButton[9][9];privateint[]novo=newint[100];// private int [] novo_aux = new int[15];privateJFramewin=newJFrame("Sudoku");privateJPanel[]painel=newJPanel[9];privateJMenuBarbarra=newJMenuBar();privateJMenumenu1=newJMenu("Opçoes");privateJMenuItemitem1=newJMenuItem("Novo Jogo");privateJMenuItemitem2=newJMenuItem("Sobre...");privateJMenuItemitem3=newJMenuItem("Sair");/*Construtor da Classe ele faz os botoes e a janela*/publicSudoku(){fazBotao();fazJanela();novoJogo();limpa_matriz();}/*Metodo que faz o meno da Barra de Menu*/publicJMenuBarmenu(){item1.addActionListener(this);menu1.add(item1);item2.addActionListener(this);menu1.add(item2);item3.addActionListener(this);menu1.add(item3);barra.add(menu1);returnbarra;}/*Metodo que faz os botoes*/publicvoidfazBotao(){for(inti=0;i<botao.length;i++){painel[i]=newJPanel(newGridLayout(3,3));painel[i].setBorder(BorderFactory.createLineBorder(Color.BLACK,1));for(intj=0;j<botao.length;j++){botao[i][j]=newJButton();botao[i][j].setText(" ");botao[i][j].addActionListener(this);painel[i].add(botao[i][j]);}}}/*Metodo que faz as janelas*/publicvoidfazJanela(){win.setJMenuBar(menu());win.getContentPane().setLayout(newGridLayout(3,3));win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);for(inti=0;i<painel.length;i++){win.getContentPane().add(painel[i]);}//win.pack();win.setSize(390,350);win.setDefaultLookAndFeelDecorated(false);win.setResizable(false);win.setVisible(true);}publicvoidlimpa_matriz(){intloop=0;while(loop<10){for(intline=0;line<botao.length;line++){for(intcoln=0;coln<botao.length;coln++){for(intline1=0;line1<botao.length;line1++){for(intcoln1=0;coln1<botao.length;coln1++){if(!(botao[line][coln].getText().equals(" "))){if(!(botao[line1][coln1].getText().equals(" "))){Stringx=(botao[line][coln].getName());Stringy=(botao[line1][coln1].getName());if(x.equals(y)){botao[line][coln].setText(" ");}}}}}}}loop=loop+1;}}/*Metodo que inicia um novo Jogo*/publicvoidnovoJogo(){intlin,col;booleanval;for(inti=0;i<novo.length;i++){novo[i]=(int)(1+(Math.random()*9));// novo_aux[i] = (int)(numero);}for(inti=0;i<botao.length;i++){for(intj=0;j<botao.length;j++){botao[i][j].setText(" ");}}for(inti=0;i<novo.length;i++){lin=(int)(Math.random()*9);col=(int)(Math.random()*9);for(intcoluna=0;coluna<botao.length;coluna++){if(!(botao[lin][coluna].getText().equals(" "))&&botao[lin][coluna].getText().compareTo(Integer.toString(novo[i]))==0){novo[i]=99;}}for(intlinha=0;linha<botao.length;linha++){if(!(botao[linha][col].getText().equals(" "))&&botao[linha][col].getText().compareTo(Integer.toString(novo[i]))==0){novo[i]=99;}}if(novo[i]!=99){botao[lin][col].setText(String.valueOf(novo[i]));}}limpa_matriz();}/*Metodo que gerencia os Eventos da Classe*/publicvoidactionPerformed(ActionEvente){Stringn=" ";intnro;/*No menu Novo Jogo*/if(e.getSource()==item1){novoJogo();limpa_matriz();}/*No menu Sobre...*/if(e.getSource()==item2){JOptionPane.showMessageDialog(null,"Sudoku!!! \n"+"Inteligência Artificial I \n"+"Desenvolvedor:"+"\nAlker Barni RA. 986956","Sobre Sudoku",JOptionPane.WARNING_MESSAGE);}/*No menu Sair*/if(e.getSource()==item3){System.exit(0);}/*Aqui eu vou gerenciar os eventos de cada botao do Array*/for(inti=0;i<botao.length;i++){for(intj=0;j<botao.length;j++){if(e.getSource()==botao[i][j]){do{/*loop de integridade de dado*/nro=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o numero","Sudoku",JOptionPane.WARNING_MESSAGE));if(nro<=0||nro>9){JOptionPane.showMessageDialog(null,"Numero Inválido","Sudoku Notifica",JOptionPane.WARNING_MESSAGE);}}while(nro<=0||nro>9);/*Fim do loop*/n=n.valueOf(nro);botao[i][j].setText(n);if(e.getSource()==botao[i][j]){break;}}}}/*Fim dos Eventos*/}/*Metodo Principal Chamando o Construtor*/publicstaticvoidmain(Stringargs[]){newSudoku();}}
Lembrando que eu estou reutilizando este código de um usuário aqui do forum e estou adaptando a lógica do jogo.
71C4700
Cara ja que vc vai trabalhar com uma Tabela de valores, porque nao utiliza visualmente uma JTable?
Seria melhor de controlar ate mesmo os eventos…
Vou colocar uma joguinho que fiz utilizando-a, num ta bom mas ja é alguma coisa…
Boster
Vou conferir assim que chegar me casa. =)
Eh q nao manjo de java neh, to fazendo e aprendendo.
Não sei como alterar esse arquivo que peguei e começar utilizar JTable.
Valeu pela força
71C4700
Este que te passei é só um exemplo nao tem como modificar…
Mas de uma olhada em JTable resolveria uma grande parte de seu probelama.
M
miguel.satriani
publicvoidlimpa_matriz(){intloop=0;while(loop<10){for(intline=0;line<botao.length;line++){for(intcoln=0;coln<botao.length;coln++){for(intline1=0;line1<botao.length;line1++){for(intcoln1=0;coln1<botao.length;coln1++){if(!(botao[line][coln].getText().equals(" "))){if(!(botao[line1][coln1].getText().equals(" "))){Stringx=(botao[line][coln].getName());Stringy=(botao[line1][coln1].getName());// o "x" esta vindo null!if(x!=null&&x.equals(y)){botao[line][coln].setText(" ");}}}}}}}loop=loop+1;}}