Codigo para calcular se competidor consegue completar maratona ou nao

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"); 
            
        }
        }
    }
        }
    }

  
    
    

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

[quote=drsmachado]É…
Como assim?
O que está faltando?
Qual a dúvida?
Erro?[/quote]

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.

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?

[quote=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?[/quote]

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.

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+

[quote=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+[/quote]

o que não foi preenchido ainda?

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.

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

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

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+

[quote=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+[/quote]

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)

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"); 
		        }
	        }
        }
    }
}

[quote=alissonvla]segue,

[code]
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"); 
	        }
        }
    }
}

}
[/code][/quote]

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(); 

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.