To com problemas em inserir um numero em um vetor. (LOGICA)

3 respostas
V

Esse é meu codigo:
(no fim desse post vou descreve-lo)

import javax.swing.JOptionPane;

public class num11 {

	public static void main(String[] args) {

		String nTemp = JOptionPane.showInputDialog("Quantos numeros o vetor tem?");
		int n = Integer.parseInt(nTemp);
		int numeros[] = new int[n+1];
		for(int z=0;z<n;z++){
			String vTemp = JOptionPane.showInputDialog("Digite um valor int");
			int v = Integer.parseInt(vTemp);
			numeros[z] = v;
		}
		int i = 0;
		String tTemp = JOptionPane.showInputDialog("Numero a ser inserido?");
		int temp = Integer.parseInt(tTemp);
		if(temp <= numeros[0]){
			int ultimo = numeros.length - 2;
			for(int j=ultimo;j>=0;j--){
				numeros[j+1] = numeros[j];	
		
			}
		numeros[0] = temp;
		}
		else {
			if(temp >= numeros[(numeros.length - 2)]){
				numeros[(numeros.length - 1)] = temp;
			}
			else{
					while(i<(numeros.length -1)){
						if(temp >= numeros[i] && temp < numeros[i+1]) {
							//AQUI NAO CONSIGO RESOLVER =///
							
						}
						i++;
					}
			}
			
		}
		for(int l : numeros)
			JOptionPane.showMessageDialog(null, l);

	}

}

Em um vetor JA ordenado eu preciso inserir um numero no lugar correto dele,
ja consegui colocar ele no comeco, no fim e tambem ja consegui faze um codigo que ache seu lugar no meiu do vetor.
O problema é que eu nao to conseguindo passar os numeros para a direita, e inseri-lo no lugar desejado =/

(ps: nao posso simplesmente inserir ele no final e usar um metodo de ordenacao, tenho que inseri-lo direto no lugar dele)

bem, eh isso, to apanhando muito =(
abraço´s[/code]

3 Respostas

L

vc consegue achar o lugar onde deve inserir o numero

temp >= numeros[i]

da posição i para frente, todos números precisarão ser deslocados para direita do vetor, e isso vc ja faz quando vc inclui no inicio

for(int j=ultimo;j>=0;j--){
   numeros[j+1] = numeros[j];   
}

unica coisa que mudaria era que vc naum vai faz um looping enquanto for maior que 0 e sim enquanto for maior/igual a i.
Eu não tenho como ficar testando agora, mas meio dia posso dar uma testada, mas ficaria mais ou menos assim acho:

for(i = 0; i < numeros.length - 1 && temp >= numeros[i]; i++); //posiciona o i no lugar certo
//faz aquele looping para deslocar tudo que for maior/igual a i para direita
//faz numeros[i] = temp;

meio dia eu dou uma testada e vejo se funca, mas a principio acho que é isso…

valeu.

V

opa,
aparentemente consegui, mas ainda to testando pra ve se algum numero nao da erro…
ta ai o codigo pra qm quer da uma olhada
(uke eu inclui vo por em negrito)

import javax.swing.JOptionPane;

public class num11 {

	public static void main(String[] args) {

		int counter = 0;
		String nTemp = JOptionPane.showInputDialog("Quantos numeros o vetor tem?");
		int n = Integer.parseInt(nTemp);
		int numeros[] = new int[n+1];
		for(int z=0;z<n;z++){
			String vTemp = JOptionPane.showInputDialog("Digite um valor int");
			int v = Integer.parseInt(vTemp);
			numeros[z] = v;
		}
		int i = 0;
		String tTemp = JOptionPane.showInputDialog("Numero a ser inserido?");
		int temp = Integer.parseInt(tTemp);
		if(temp <= numeros[0]){
			int ultimo = numeros.length - 2;
			for(int j=ultimo;j>=0;j--){
				numeros[j+1] = numeros[j];	
		
			}
		numeros[0] = temp;
		}
		else {
			if(temp >= numeros[(numeros.length - 2)]){
				numeros[(numeros.length - 1)] = temp;
			}
			else{
					while(i<(numeros.length -1)){
						if(temp >= numeros[i] && temp < numeros[i+1] && counter == 0) {
							int ultimo = numeros.length - 2;
							for(int j =ultimo;j>=i+1;j--){
								numeros[j+1] = numeros[j];
							}
							numeros[i+1] = temp;
							counter += 1;							
						}
						i++;
					}
			}
			
		}
		for(int l : numeros)
			JOptionPane.showMessageDialog(null, l);

	}

}

incluido:
int counter = 0; no comeco do codigo

counter == 0 no if do meio

int ultimo = numeros.length - 2;

for(int j =ultimo;j>=i+1;j){

numeros[j+1] = numeros[j];

}

numeros[i+1] = temp;

counter += 1;



isso ai foi o que criei agora[/b]
C

Olá vaninh0,

Pra “passar os valores pra direita”, é só copiar os elementos à direita do elemento inserido para uma posição a mais (certificando-se que o array cabe esse aumento). A maneira mais intuitiva de se fazer isso é:

public static void inserirElementoEmArray(int elemento, int posicao, int[] array, int tamanhoAtualDoArray) { if (tamanhoAtualDoArray + 1 == array.length) { throw new IllegalStateException("O array não cabe mais um elemento"); } for (int i = posicao; i < tamanhoAtualDoArray; i++) { array[i + 1] = array[i]; } array[posicao] = elemento; }

Mas existe uma outra maneira de se fazer isso, utilizando a classe System:

public static void inserirElementoEmArray(int elemento, int posicao, int[] array, int tamanhoAtualDoArray) { System.arraycopy(array, posicao, array, posicao + 1, tamanhoAtualDoArray); array[posicao] = elemento; }

(Eu preferi fazer em métodos, pra ficar mais isolado do seu exemplo, senão eu ia ter que tentar entender ele, e eu tô com preguiça :P)

Qualquer dúvida, poste aqui!

Até mais, :wink:

Criado 22 de agosto de 2006
Ultima resposta 22 de ago. de 2006
Respostas 3
Participantes 3