Codigo para calcular se competidor consegue completar maratona ou nao

14 respostas
C

Amigos, estou quebrando cabela a mais de 3 semans com esse codigo e tenhode entregar esse trabalho hoje, o programa deve calcular se a distancia entre os postos de agua for menor que a resistencia do competidor então ele consegue completar a maratona, senão ele não consegue completar, segue o codigo, por favor me deeem uma luz, ja tentei detudo enão consegui:

package trabalho;

    public class teste {

        public static void main (String []args){

            int n, i=0, m;
            int pi[];
           
            
          
           
          n = InOut.leInt("Por favor entre com o numero de postos de agua");// quantidade de postos de agua ao longo da maratona = 8
          m = InOut.leInt("Entre com a distancia intermediaria maxima do competidor"); // resistencia por metros do competidor sem beber agua = 6000

   pi = new int[n]; //neste caso pi é um vetor com n posições => número de postos de água;

   
    for (i=0; i < n; i++){     //for contador de vetores = posições dos postos de agua
        
        int index = i + 1;  
                  
    pi[i] = InOut.leInt("Entre com a distancia entre os postos de agua");        /*serao respectivamente: 0, 6000, 12000, 18000, 24000, 32000, 37000, 40000 (com essa distancia de postos de agua o competidor com m= 6000 nao consegue completar a maratona)*/
    
        if (index  < n){         //condição para index não ultrapassar o valor de n
            if ( pi[index]-pi[i] <= m){ //se pi[i+0] - pi[i] < 6000
                
                System.out.println("S");  //por estar dentro do for a cada contagem do for ele imprime, dando erro
        
            }else{
            
            System.out.println("N"); 
            
        }
        }
    }
        }
    }

14 Respostas

drsmachado

É…
Como assim?
O que está faltando?
Qual a dúvida?
Erro?

C

drsmachado:
É…
Como assim?
O que está faltando?
Qual a dúvida?
Erro?

O codigo está errado, mas não consigo identificar o erro, pois tudo que estava ao meu alcance eu fiz. O programa deve imprimir “N” caso seja inclusos so valores sugeridos nos comentários, mas ele so imprime “S”, e o problem ae que imprime toda hora, sei que esta imprimindo toda hora pq esta no for, mas se tirar o erro persiste.

drsmachado

Tua pergunta está muito vaga.
O que você pretende com o index?
Por que aquele for, para espaçar os postos de água?

Até onde compreendi, a questão deverá verificar se num percurso X, com n postos de água, espaçados com distância X/n, o competidor cuja capacidade de resistencia, em metros é y, consegue ir de um posto a outro de água, até completar X, certo?

Logo, se X/n > y (percurso total/número de postos de água maior que resistência) o competidor deve desistir.
Se for o contrário, o competidor consegue.

Certo?

C

drsmachado:
Tua pergunta está muito vaga.
O que você pretende com o index?
Por que aquele for, para espaçar os postos de água?

Até onde compreendi, a questão deverá verificar se num percurso X, com n postos de água, espaçados com distância X/n, o competidor cuja capacidade de resistencia, em metros é y, consegue ir de um posto a outro de água, até completar X, certo?

Logo, se X/n > y (percurso total/número de postos de água maior que resistência) o competidor deve desistir.
Se for o contrário, o competidor consegue.

Certo?

Ok. O index = i + 1 (pretendo diminuir ele por pi[i]), ou seja, vou dar uma exemplo, eu colocando n = 8(postos de agua), m = 6000 (distancia de rendimento que o competidor consegue corre sem beber agua), ai vem a condição:

if ( pi[index]-pi[i] <= m){ //ou seja se pi[0+1] - pi[0] < = m , ou seja, p[0+1] = 6000 e pi[0] = 0, entao 6000-0= 6000 ele e < ou = a m(6000). sim né?

O for é para contar quantos postos e agua há na maratona
logo se n= 8 (corrida possui 8 postos de agua),
então p vetor pi ira guardar as diastancias dos postos de agua, ou seja, seguindo o comentario
o primeiro posto de agua fica na diatancia 0 metros
o segundo fica na distancia 6000 metros
o terceiro fica na distancia 12000 metrios e assim por diante

O problema estou quase perto de conseguir soluciuonar este problema , mas não consigo ver onde esta o erro, tenho pouca experiencia em java, e ja tentei de tudo e so nao conseguirei.

A

cara,

sua logica ta errada na linha 26, vc ta pegando uma posicao do array q naao foi preenchido ainda, entao sempre fica um valor negativo, por isso q sempre imprime S.

t+

C

alissonvla:
cara,

sua logica ta errada na linha 26, vc ta pegando uma posicao do array q naao foi preenchido ainda, entao sempre fica um valor negativo, por isso q sempre imprime S.

t+

o que não foi preenchido ainda?

A

pi[index] sempre vai retornar 0, pq vc ta tentando acessar um posição do seu array que nao foi preenchida. da uma debuggada ai para vc ver.

C

mas pi[index] pra mim = pi[i+1], pois ele está dentro do for não esta?

A

nao se esqueça, a primeira posição de array é 0, da uma debuggada na linha 26, vc vai ver seu erro

A

vo colocar a solução do seu problema, mas vc ta precisando dar uma estudada heinn…

for (int i = 0; i < n; i++){     //for contador de vetores = posições dos postos de agua
        	System.out.println("Entre com a distancia entre os postos de agua");
        	pi[i] = dado.nextInt();        /*serao respectivamente: 0, 6000, 12000, 18000, 24000, 32000, 37000, 40000 (com essa distancia de postos de agua o competidor com m= 6000 nao consegue completar a maratona)*/

	        if (i  > 0){         //condição para index não ultrapassar o valor de n
	            if (pi[i] - pi[i - 1] <= m){ //se pi[i+0] - pi[i] < 6000
	                System.out.println("S");  //por estar dentro do for a cada contagem do for ele imprime, dando erro
	            }else{
		            System.out.println("N"); 
		        }
	        }
        }

t+

C

alissonvla:
vo colocar a solução do seu problema, mas vc ta precisando dar uma estudada heinn…

for (int i = 0; i < n; i++){     //for contador de vetores = posições dos postos de agua
        	System.out.println("Entre com a distancia entre os postos de agua");
        	pi[i] = dado.nextInt();        /*serao respectivamente: 0, 6000, 12000, 18000, 24000, 32000, 37000, 40000 (com essa distancia de postos de agua o competidor com m= 6000 nao consegue completar a maratona)*/

	        if (i  > 0){         //condição para index não ultrapassar o valor de n
	            if (pi[i] - pi[i - 1] <= m){ //se pi[i+0] - pi[i] < 6000
	                System.out.println("S");  //por estar dentro do for a cada contagem do for ele imprime, dando erro
	            }else{
		            System.out.println("N"); 
		        }
	        }
        }

t+

ta dando erro na linha 3 variavel dado: cannot find symbol
Exception in thread “main” java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: dado.nextInt
at trabalho.teste.main(teste.java:22)

A

segue,

package trabalho; 

import java.util.Scanner;


public class teste {

    public static void main (String []args){
    	Scanner dado = new Scanner(System.in);
    	
    	System.out.println("Por favor entre com o numero de postos de agua");
        int n = dado.nextInt();// quantidade de postos de agua ao longo da maratona = 8
        
        System.out.println("Entre com a distancia intermediaria maxima do competidor");
        int m = dado.nextInt(); // resistencia por metros do competidor sem beber agua = 6000

        int pi [] = new int[n]; //neste caso pi é um vetor com n posições => número de postos de água;
   
        for (int i = 0; i < n; i++){     //for contador de vetores = posições dos postos de agua
        	System.out.println("Entre com a distancia entre os postos de agua");
        	pi[i] = dado.nextInt();        /*serao respectivamente: 0, 6000, 12000, 18000, 24000, 32000, 37000, 40000 (com essa distancia de postos de agua o competidor com m= 6000 nao consegue completar a maratona)*/

	        if (i  > 0){         //condição para index não ultrapassar o valor de n
	            if (pi[i] - pi[i - 1] <= m){ //se pi[i+0] - pi[i] < 6000
	                System.out.println("S");  //por estar dentro do for a cada contagem do for ele imprime, dando erro
	            }else{
		            System.out.println("N"); 
		        }
	        }
        }
    }
}
C
alissonvla:
segue,
package trabalho; 

import java.util.Scanner;


public class teste {

    public static void main (String []args){
    	Scanner dado = new Scanner(System.in);
    	
    	System.out.println("Por favor entre com o numero de postos de agua");
        int n = dado.nextInt();// quantidade de postos de agua ao longo da maratona = 8
        
        System.out.println("Entre com a distancia intermediaria maxima do competidor");
        int m = dado.nextInt(); // resistencia por metros do competidor sem beber agua = 6000

        int pi [] = new int[n]; //neste caso pi é um vetor com n posições => número de postos de água;
   
        for (int i = 0; i < n; i++){     //for contador de vetores = posições dos postos de agua
        	System.out.println("Entre com a distancia entre os postos de agua");
        	pi[i] = dado.nextInt();        /*serao respectivamente: 0, 6000, 12000, 18000, 24000, 32000, 37000, 40000 (com essa distancia de postos de agua o competidor com m= 6000 nao consegue completar a maratona)*/

	        if (i  > 0){         //condição para index não ultrapassar o valor de n
	            if (pi[i] - pi[i - 1] <= m){ //se pi[i+0] - pi[i] < 6000
	                System.out.println("S");  //por estar dentro do for a cada contagem do for ele imprime, dando erro
	            }else{
		            System.out.println("N"); 
		        }
	        }
        }
    }
}

saida esta errada:

Por favor entre com o numero de postos de agua

8
Entre com a distancia intermediaria maxima do competidor
6000
Entre com a distancia entre os postos de agua
0
Entre com a distancia entre os postos de agua
6000
S
Entre com a distancia entre os postos de agua
12000
S
Entre com a distancia entre os postos de agua
18000
S
Entre com a distancia entre os postos de agua
24000
S
Entre com a distancia entre os postos de agua
32000
N
Entre com a distancia entre os postos de agua
37000
S
Entre com a distancia entre os postos de agua
40000
S
CONSTRUÍDO COM SUCESSO (tempo total: 53 segundos)

A saida deve er apenas N ou S uma unica vez e não ficar imprimindo toda hora .

Outras duvidas:

Scanner dado = new Scanner(System.in);
o que significa? eu tenho uma classe propria para ler que se chama InOut
int n = dado.nextInt();
pi[i] = dado.nextInt();
ViniGodoy

Ele já praticamente resolveu o programa para você. Agora que tal estudar o que foi feito, entender onde você errou e corrigir você mesmo esse último detalhe que falta?
Com programação não se brinca. Se não estudar de verdade agora, vai se dar mal o curso inteiro.

Criado 28 de setembro de 2011
Ultima resposta 29 de set. de 2011
Respostas 14
Participantes 4