Porque o meu programa para no meio?

2 respostas
M
/<em>logo abaixo eu tenho uma instrução que é "array.length-1" .


Por que o meu programa nao me  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");








   }





	





}

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


----------------------------





 que, o tamanho do array é 15 ok?


E você tenta fazer com que o array esteja na posição do middle,  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 . :smiley:

Criado 9 de janeiro de 2003
Ultima resposta 15 de jan. de 2003
Respostas 2
Participantes 2