Olá, preciso fazer um trabalho de faculdade e estou tendo um problema com meu código. Eu tenho um botão que verifica se o vetor string tem algum indice vazio, se tiver, ele vai adicionar o valor que está no jtextfield neste indice e vai sair do laço de repetição, desta forma, eu vou poder adicionar o valor que eu quiser, quando eu quiser no vetor string. Logo depois, eu tenho um outro botão que pega o vetor com os valores que eu adicionei e ordena ele por um algoritmo de ordenação que ordena strings e mostra o valor já ordenado em um jtextarea (os valores do vetor são numeros, ent n tem erro na ordenação). O problema, é que se eu quiser adicionar apenas 2, ou 3, ou 4, ou 5 ou menos valores do que o indice do vetor permite, ou seja, deixar algum indice vazio, eu recebo um erro: Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException. Alguem poderia me dizer como eu preencho o restante dos indices vazios (se tiver algum indice vazio) com valores que não afetem na ordenação?
// Método para adicionar os valores do textField não editável ao vetor T:
private void btnAddAoVetor_actionPerformed(ActionEvent e) {
String a;
int cont=0;
if(textField.getText().equals("")){
a=null;
JOptionPane.showMessageDialog(null, "Selecione um dos dados da tabela!");
}else {
for(int i=0;i<=this.T.length;i++){
a=String.valueOf(textField.getText());
if(this.T[i]==null) {
this.T[i]=String.valueOf(a.trim());
JOptionPane.showMessageDialog(null, "Dados adicionados ao vetor!");
break;
}
cont++;
}
}
if(cont==this.T.length) {
JOptionPane.showMessageDialog(null, "Impossível adicionar mais dados ao vetor!");
}
}
// Botão para ordenar o vetor pelo método MergeSort e mostrar na tela:
private void ordenarporMS_actionPerformed(ActionEvent e) {
// algorítmo que verifica se à indices vazios no vetor T:
for(int i=0;i<=this.T.length;i++){
if(this.T[i]==null) {
this.T[i]=String.valueOf(""); // ----> aqui o codigo coloca um valor vazio no indice que está nulo, ou vazio.
break;
}else {if(this.T[i]!=null) {
i++;
}
}
}
// fim do algoritimo de verificação.
long inicio;
long fim;
//tirando o tempo da ordenação:
inicio = System.currentTimeMillis();
MS.mergeSort(this.T);
fim = System.currentTimeMillis();
System.out.printf("%.3f ms%n", (fim - inicio) / 1000d);
for(String T1 : this.T) {
textArea.append(T1.trim()+" - ");
}
}
Aqui tenho o algoritmo de ordenação:
public class MS {
public static void mergeSort(String[] T) {
if (T.length > 1) {
String[] left = new String[T.length / 2];
String[] right = new String[T.length - (T.length / 2)];
for (int i = 0; i < left.length; i++) {
left[i] = T[i];
}
for (int i = 0; i < right.length; i++) {
right[i] = T[i + T.length / 2];
}
mergeSort(left);
mergeSort(right);
merge(T, left, right);
}
}
public static void merge(String[] T, String[] left, String[] right) {
int a = 0;
int b = 0;
for (int i = 0; i < T.length; i++) {
if (b >= right.length || (a < left.length && left[a].compareToIgnoreCase(right[b]) < 0)) {
T[i] = left[a];
a++;
break;
} else {
T[i] = right[b];
b++;
break;
}
}
}
}
E aqui tem o erro:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at algoritmoOrd.MS.merge(MS.java:36)
at algoritmoOrd.MS.mergeSort(MS.java:25)
at algoritmoOrd.MS.mergeSort(MS.java:23)
at algoritmoOrd.MS.mergeSort(MS.java:24)
at gui.Janela.ordenarporMS_actionPerformed(Janela.java:427)
at gui.Janela.access$1(Janela.java:405)
at gui.Janela$7.actionPerformed(Janela.java:195)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.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)
Agradeço desde já a atenção. preciso muito disso, estou á meses procurando e já estou sem tempo . Vlw!