/<em>logo abaixo eu tenho uma instrução que é "array.length-1" .
Por que o meu programa nao me dá a menssagem de nao encontrado ,
se eu tirar o meneos um .</em>/
import java.awt.<em>;
import javax.swing.</em>;
import java.awt.event.<em>;
public class pbinary extends JApplet implements ActionListener{
JLabel enterLabel , resultLabel;
JTextField enter , result;
int a[];
public void init(){
Container c = getContentPane();
c.setLayout(new FlowLayout());
enterLabel = new JLabel("Enter key");
c.add (enterLabel);
enter = new JTextField(5);
enter.addActionListener(this);
c.add(enter);
resultLabel = new JLabel ("Result");
c.add(resultLabel);
result = new JTextField(22);
result.setEditable(false);
c.add(result);
a = new int[15];
for (int i=0 ; i<a.length ;i++)
a[i] = 2</em>i;
}
public int binarySearch(int array[],int key)
{
int low = 0;
int high = array.length-1; //linha do problema
int middle ;
while (low<=high)
{
middle = low+high/2;
if(key == array[middle])
return middle;
else if(key < array[middle])
high = middle -1;
else
low = middle +1;
}
return -1;
}
public void actionPerformed(ActionEvent e )
{
String searchKey = e.getActionCommand();
int element = binarySearch(a,Integer.parseInt(searchKey));
if(element != -1)
result.setText("Found value in element"+element);
else
result.setText("Value is not found");
}
}
Porque o meu programa para no meio?
M
2 Respostas
A
O erro que está estourando é o seguinte…
<b>java.lang.ArrayIndexOutOfBoundsException</b>
Este erro está acontecendo pelo seguinte motivo:
Eu rodei seu software aqui no meu eclipse, e fiz alguns logs…
Digitei o valor 122 e ele me logou isso
----------------------------
1 - array.length 15
middle 7
array.length 15
middle 15
array.length 15
----------------------------
Só que, o tamanho do array é 15 ok?
E você tenta fazer com que o array esteja na posição do middle, só que middle tem posição 15! Pronto, estoura o erro!
Imagino que você pensou
"Pô, mas o array tem 15 posições e o middle solicitou que ele apontasse a posição 15, como pode dar erro?"
Bem, é o seguinte, se array tem 15 posições, ele na verdade vai ir até a posição 14, pois o array começa com 0!
<img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pnglight_smile.png?v=9" title=":slight_smile:" class="emoji" alt=":slight_smile:">
Simples não?
Flw!!
<pre>
/<em>logo abaixo eu tenho uma instrução que é "array.length-1" .
Por que o meu programa nao me dá a menssagem de nao encontrado ,
se eu tirar o meneos um .</em>/
import java.awt.<em>;
import javax.swing.</em>;
import java.awt.event.*;
public class pbinary extends JApplet implements ActionListener {
JLabel enterLabel, resultLabel;
JTextField enter, result;
int a[];
public void init() {
Container c = getContentPane();
c.setLayout(new FlowLayout());
enterLabel = new JLabel("Enter key");
c.add(enterLabel);
enter = new JTextField(5);
enter.addActionListener(this);
c.add(enter);
resultLabel = new JLabel("Result");
c.add(resultLabel);
result = new JTextField(22);
result.setEditable(false);
c.add(result);
a = new int[15];
for (int i = 0; i < a.length; i++)
a[i] = 2 * i;
}
public int binarySearch(int array[], int key) {
int low = 0;
System.out.println("1 - array.length " + array.length);
int high = array.length - 1; //linha do problema
int middle;
while (low <= high) {
middle = low + high / 2;
System.out.println(" middle " + middle);
System.out.println(" array.length " + array.length);
if (key == array[middle])
return middle;
else if (key < array[middle])
high = middle - 1;
else
low = middle + 1;
}
return -1;
}
public void actionPerformed(ActionEvent e) {
String searchKey = e.getActionCommand();
int element = binarySearch(a, Integer.parseInt(searchKey));
if (element != -1)
result.setText("Found value in element" + element);
else
result.setText("Value is not found");
}
}
</pre>
M
Obrigado pela resposta .
Valeu Mesmo . 
Criado 9 de janeiro de 2003
Ultima resposta 15 de jan. de 2003
Respostas 2
Participantes 2
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo Inteligencia Artificial e ChatGPT: Da revolucao dos... Por Fabricio Carraro — Casa do Codigo