Vetor - maior e menor elemento

09/04/2009

Sr´s, bom dia.... eu tenho o seguinte código: [b] int [] v = {3, 2, 4, 7, 5, 8, 6, 1, 9, 10}; OrdenacaoDecrescente bs = new OrdenacaoDecrescente(); bs.Ordenar(v); System.out.println("Vetor Ordenado abaixo em forma decrescente:"); for(int num : v){ System.out.print(num + " "); } int menor = 0; int maior = 0; for(int a = 0; a < v.length; a++) if(v[a] > maior){ maior = v[a]; if(v[a] < menor) menor = v[a];} System.out.println(); System.out.println("Maior Elemento : " + maior); System.out.println("Menor Elemento : " + menor); [/b] O problema está sendo o seguinte: no momento dele encontrar o menor elemento, ele busca apenas o valor iniciada na variável " 0" e não busca no vetor.. o que eu estou fazendo de errado ? Obrigado.

Bruno

Respostas

09/04/2009

Carlos Heuberger

... O problema está sendo o seguinte: no momento dele encontrar o menor elemento, ele busca apenas o valor iniciada na variável " 0" e não busca no vetor.. [b]o que eu estou fazendo de errado ?[/b]
[b]int menor = 0;[/b] só irá achar valores menores que zero... Soluções: 1) int menor = Integer.MAX_VALUE; meio feio mas funciona.... 2) int menor = v[0] não funciona se o vetor estiver vazio... 3) resultado: menor = v[v.length-1] já que o vetor foi ordenado em ordem decrescente, o maior valor estará na primeira posição e o menor na última... assumindo que a ordenação tenha funcionada. []]
Responder Citar

09/04/2009

Carlos Heuberger

PS: obviamente o mesmo erro vai ocorrer com o [b]maior[/b], se tiver somente valores negativos dentro do vetor...
Responder Citar

09/04/2009

Deh

Segue um código legalzinho:
public class Teste {
public static void main(String[] args) {
		int vetor[] = {5, 3, 1, 11, 18, 10};
	
		System.out.println("inicial");
		imprimirElementos(vetor);
		
		boolean flag;
		do {
			flag = false;
			
			for (int i = 1; i < vetor.length; i++) {
				if (vetor[i - 1] > vetor[i]) {
					int temp = vetor[i -1];
					vetor[i - 1] = vetor[i];
					vetor[i] = temp;
					flag = true;
				}
			}
		} while (flag);
		
		System.out.println("Ordernados");
		imprimirElementos(vetor);
		

		if (vetor.length > 0) 
                      System.out.println("Menor: " + vetor[0] + " Maior: " + vetor[vetor.length -1]);
                else 
                      System.out.println("Não há elementos no vetor");
	}

	private static void imprimirElementos(int vetor[]) {
		for (int elementos : vetor) {
			System.out.print(elementos + " - ");
		}
		System.out.println();
	}
}
Responder Citar

09/04/2009

Bruno

Sr´s... Muito obrigado pela ajuda, consegui fazer o que queria. Bruno
Responder Citar

26/03/2011

Roni

Batman, usei o seu algoritmo porém houve uma falha,na hora de ordenar em vez de ordenar corretamente , ele da um bug, exemplo: coloco valores de 12,70,20,50 Horaq ele ordena ele poem o 18 como menor e na lista de sequencia aparece apenas 18,70,70,70,70 tentei reformular esse alorimo mesmo assim naão tive solucao :(
Responder Citar

20/03/2012

Petronio Filho

Poxa vida, ninguém dá um código certo não é? Para quem teve dúvidas e perdeu horas e mais horas de busca e não encontrou nada ai segue um código que de fato funciona.
Responder Citar

20/03/2012

Petronio Filho

Batman, usei o seu algoritmo porém houve uma falha,na hora de ordenar em vez de ordenar corretamente , ele da um bug, exemplo: coloco valores de 12,70,20,50 Horaq ele ordena ele poem o 18 como menor e na lista de sequencia aparece apenas 18,70,70,70,70 tentei reformular esse alorimo mesmo assim naão tive solucao :(
Respondi sua questão
Responder Citar

20/03/2012

Petronio Filho

depois de quase um ano...
Poxa vida, ninguém dá um código certo não é? Para quem teve dúvidas e perdeu horas e mais horas de busca e não encontrou nada ai segue um código que de fato funciona.
funciona, mas somente se não tiver número negativo ou maior que 9999999... Foi por isso que escrevi que seria melhor inicializar os valores com [color=#008800]Integer.MAX_VALUE[/color] e [color=#008800]Integer.MIN_VALUE[/color]!
[quote="crazyshock"]Batman, usei o seu algoritmo porém houve uma falha,na hora de ordenar em vez de ordenar corretamente , ele da um bug, exemplo: coloco valores de 12,70,20,50 Horaq ele ordena ele poem o 18 como menor e na lista de sequencia aparece apenas 18,70,70,70,70 tentei reformular esse alorimo mesmo assim naão tive solucao :(
Respondi sua questão [/quote] será? Na verdade nem tem questão... Penso que o algoritmo do [b]batman[/b] está correto! Funciona perfeitamente com os valores 12,70,20,50. É muito estranho o [b]crazyshock[/b] ter obtido um array com uma posição adicional - resultado tem cinco elementos, mas a entrada somente 4 - e com o número 18 que nem consta nas dados de entrada... Deve ter errado na hora de copiar...
Responder Citar

21/03/2012

Lucas Iorio

Não sei qual seria o exercício, e não li todos os post, não poderia ser aassim?

import java.util.Arrays;

public class SortArray {
	public static void main(String[] args) {
		int vetor[] = {5, 3, 1, 11, 18, 10};
		
		Arrays.sort(vetor);
		
		for (int number : vetor) {
			System.out.println(number);
		}
	}
}
Responder Citar

22/03/2012

Petronio Filho

Lógico, acabei de entrar no blog e eu busquei essa resposta pq também me pediram na faculdade. Tava com um trabalho p fazer. Na humildade a gente vai aprendendo mais.
depois de quase um ano... [quote="Petronio Filho"]Poxa vida, ninguém dá um código certo não é? Para quem teve dúvidas e perdeu horas e mais horas de busca e não encontrou nada ai segue um código que de fato funciona.
funciona, mas somente se não tiver número negativo ou maior que 9999999... Foi por isso que escrevi que seria melhor inicializar os valores com [color=#008800]Integer.MAX_VALUE[/color] e [color=#008800]Integer.MIN_VALUE[/color]!
[quote="crazyshock"]Batman, usei o seu algoritmo porém houve uma falha,na hora de ordenar em vez de ordenar corretamente , ele da um bug, exemplo: coloco valores de 12,70,20,50 Horaq ele ordena ele poem o 18 como menor e na lista de sequencia aparece apenas 18,70,70,70,70 tentei reformular esse alorimo mesmo assim naão tive solucao :(
Respondi sua questão [/quote] será? Na verdade nem tem questão... Penso que o algoritmo do [b]batman[/b] está correto! Funciona perfeitamente com os valores 12,70,20,50. É muito estranho o [b]crazyshock[/b] ter obtido um array com uma posição adicional - resultado tem cinco elementos, mas a entrada somente 4 - e com o número 18 que nem consta nas dados de entrada... Deve ter errado na hora de copiar... [/quote]
Responder Citar

22/03/2012

Petronio Filho

[quote="Bhoppus"]... [...]
já que o vetor foi ordenado em ordem decrescente, o maior valor estará na primeira posição e o menor na última... assumindo que a ordenação tenha funcionada. []] [/quote] To de acordo com o Simu... e se tiver de ordem ascendente na primeira posição será o menor valor e o da última será o maior valor.
Responder Citar

22/03/2012

Petronio Filho

Caso o vector não esteja ordenado vem aí um exemplo para pagar o menor e maior valor do vector:
public class MaiorMenor{
    private int menor, maior;
    public void buscarMaiorMenor(int[] vector){
	     menor = vector[0];
	     maior = vector[0];
	     for(int valor: vector){
	        if(valor<menor)
	 	        menor = valor;
	        if(valor>maior)
		        maior = valor;
	     }
    }
}
Responder Citar