segundoColocado( int [] array ){

[code]/*

  • Exer37.java

*37) Uma corrida de avestruzes possui 15 participantes numerados de 0 a 14.
Imagine um programa que leia o tempo
em segundos de uma volta para cada um destes 15 participantes, armazene estes tempos
num vetor. Crie uma classe
e métodos para realizar os seguintes cálculos:
*/

/**
*

  • @author wan
    */
    public class Exer37 {

    /*
    a) O número do primeiro colocado, ou seja, o número do que deu a volta em menor
    tempo (para os valores acima, a resposta seria 8, visto que o avestruz de número
    8 fez a volta em 28 segundos)
    */

    public static int indicePrimeiroColocado( int []  array ){
      int indicePrimeiro = 0;
      int primeiro = array[0];
      for ( int i  =  1; i < array.length ; i++ ){
         if ( array[i] < primeiro ){
            primeiro = array[i];
            indicePrimeiro = i;
         }
         
      }
      return indicePrimeiro ;
    

    }

    /*
    *b) O número do SEGUNDO colocado, ou seja, o número do que deu a volta no segundo menor tempo para os valores
    acima, a resposta seria 2, visto que o avestruz de número 2 fez a volta em 29 segundos).
    **/

    public static int segundoColocado( int [] array ){
      int pColocado = array[indicePrimeiroColocado( array)];
      int indiceSegundo = -1 ;
      int segundoTempo =  0 ;
      for ( int i = 1 ; i < array.length ; i++){
     
            if ( indiceSegundo == - 1 ) {
               segundoTempo = array[i];
               indiceSegundo = i;
            }
    
         else if (array[i] < segundoTempo && pColocado < array[i] ){
            segundoTempo = array[i];
            indiceSegundo = i;
         }
         
         
         
         
      }
      return indiceSegundo;
    

    }

    }

MInha duvida é no metodo segundoColocado( int [] array )
perdi a aula que o professor explico , ai fiz isso dae mas , não esta claro , não esta encontrando o indice do segundo colocado .

num entendi muito bem se vcs tiverem um jeito mais pratico de fazer para que eu posso entender melhor
por gentileza.
ps : explicação do codigo. -.-
[/code]

Amigo, eu testei o seu código e está funcionando ok. Pelo menos aqui. Veja como eu testei:

[code]public class Testando {
// Utilizando seus métodos:
public static int indicePrimeiroColocado( int [] array ){
int indicePrimeiro = 0;
int primeiro = array[0];
for ( int i = 1; i < array.length ; i++ ){
if ( array[i] < primeiro ){
primeiro = array[i];
indicePrimeiro = i;
}

	     }
	          return indicePrimeiro ;
 }

  public static int segundoColocado( int [] array ){
	  int pColocado = array[indicePrimeiroColocado( array)];
	  int indiceSegundo = -1 ;
	  int segundoTempo =  0 ;
	  
	  	for ( int i = 1 ; i < array.length ; i++){

	  		if ( indiceSegundo == - 1 ) {
	  			segundoTempo = array[i];
	            indiceSegundo = i;
	        }

	  		else if (array[i] < segundoTempo && pColocado < array[i] ){
	  			segundoTempo = array[i];
	  			indiceSegundo = i;
	         }

	  	}

	           return indiceSegundo;
  }

public static void main(String[] args) {

	int[] array = new int[15];

	int cont = 0;

	while (cont<15)
	{
		array[cont] = Integer.parseInt(JOptionPane.showInputDialog("Tempo do jogador: " + cont));
		cont++;
	}

	System.out.println("Primeiro Colocado: " +indicePrimeiroColocado(array)+1);
	System.out.println("Segundo Colocado: " + segundoColocado(array)+1);
}

}
[/code]

Explicando a captura do segundo colocado:

 Levando em consideração que você já tenha entendido como ele capturou o primeiro colocado, para você entender como ele capturou o segundo.. vamos levar em conta que estamos trabalhando com competição cronometrada. Então, o competidor que fizer menor tempo, vence. Sendo assim, o competidor que fizer menor tempo e este tempo for maior que o do primeiro lugar, é o segundo vencedor.

- Primeiramente existe um for para percorrer todo o array ( isso acho que não precisa explicar )

- Depois ele verifica se a variável indiceSegundo está com o valor padrão, que é "-1". Caso esteja, sete a mesma com o valor do índice atual no array. Sempre que ele entrar na primeira iteração do for, ele vai passar por este IF já que a variável é local de método e será sempre inicializada pelo mesmo. Sendo assim, o primeiro valor no array estará sempre setado primeiramente na variável indiceSegundo.
  • Na próxima iteração ( Perceba que o valor agora da variável é o valor do índice anterior do array, ou seja, o índice 0 ). A primeira condição não será aceita, porque a nossa variável não é “-1”. Então, pulamos para a segunda condição.

  • É feita uma verificação se o valor do indice atual do array é menor que o valor da variável. Porque? Por que se for menor, o tempo é menor e consequentemente temos um competidor com menor tempo. Se for, ele também verifica se este tempo é maior que o tempo do primeiro colocado. Um segundo colocado, lógico, não pode ter o tempo maior que o primeiro. Caso tenho, ele será o primeiro lugar :smiley:

  • Com as 2 condições aceitas, a variável segundoTempo passa a ser o valor do índice atual do array e o indiceSegundo passa a ser a posição do índice no array.
    Importante: Pode ser que aqui que você está errado. Caso você esteja imprimindo o índice sem incrementar 1, você está dizendo que o índice anterior a ele é o seugundo lugar. Pois o array começa da posição 0, e não da 1. Ou você seta indiceSegundo = i+1; ou na hora de imprimir você incrementa mais um como eu fiz.

  • Ao final de toda a varredura no array, é retornado o valor do índice.

 Eu acredito que tenha uma maneira mais simples de fazer isto. 

 1 - Coloque todos os valores no arrayList. 
 2 - Passe esses valores para um array 
 3 - Ordene esse array com os valores copiados, com o método Arrays.sort(seuArray);
 4 - Agora temos o primeiro e o segundo colocado exatamente no índice 0 e 1 do seuArray. Faça o seguinte para achar a posição dos vencedores:

   System.out.println("Primeiro lugar: " + seuArrayList.indexOf(seuArray[0])+1 ); // +1 porque também começa com 0 :D
   System.out.println("Segundo Lugar: " + seuArrayList.indexOf(seuArray[1])+1); 

Acho que vai melhorar o teu código. Deve haver maneiras mais simples, mas de momento pensei nesta. Caso não funcione ou não consiga fazer me avisa que eu faço e coloco aqui o código pronto. Mas uma boa pesquisada em ArrayList vai te ajudar.

Espero ter ajudado… posso estar errado em alguma informação na explicação. Se eu estiver com certeza alguém falará após este post.

Abraço!