Vetor - maior e menor elemento

Java

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

Bruno

Curtidas 0

Respostas

Carlos Heuberger

Carlos Heuberger

09/04/2009

[quote="Bhoppus"]... 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. []]
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

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

Deh

09/04/2009

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();
	}
}
GOSTEI 0
Bruno

Bruno

09/04/2009

Sr´s... Muito obrigado pela ajuda, consegui fazer o que queria. Bruno
GOSTEI 0
Roni

Roni

09/04/2009

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 :(
GOSTEI 0
Petronio Filho

Petronio Filho

09/04/2009

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.
GOSTEI 0
Petronio Filho

Petronio Filho

09/04/2009

[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
GOSTEI 0
Petronio Filho

Petronio Filho

09/04/2009

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="Petronio Filho"][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 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...
GOSTEI 0
Lucas Iorio

Lucas Iorio

09/04/2009

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);
		}
	}
}
GOSTEI 0
Petronio Filho

Petronio Filho

09/04/2009

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. [quote="simu"]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="Petronio Filho"][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 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...
GOSTEI 0
Petronio Filho

Petronio Filho

09/04/2009

[quote="simu"][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. []]
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.
GOSTEI 0
Petronio Filho

Petronio Filho

09/04/2009

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;
	     }
    }
}
GOSTEI 0
POSTAR