Declarando vetor em java[Quase Resolvido]

Amigos, não sei como declarar vetor em java, como declaro o vetor abaixo?


package trabalho;

public class Quarto {
    
    public static void main (String []args){

        int n, i, m, pi[i];



        n = InOut.leInt("Por favor entre com o numero de postos de agua");//8
        m = InOut.leInt("Entre com a distancia intermediaria maxima do competidor");



for (i=0; i < n; i++){


     pi[i] = InOut.leInt("Entre com a distancia entre os postos de agua");
     



    }


    }
        
        

Cara, se a dúvida é essa

[quote]
//vetor de inteiros de 100 posições
int vetor[] = new int[100];

Era isso?

[quote=drsmachado]Cara, se a dúvida é essa

[quote]
//vetor de inteiros de 100 posições
int vetor[] = new int[100];

Era isso?[/quote]

Aqui nao deu certo, quero saber como declarar vetor especificamente neste codigo, pois a variavel pi vai receber o valor que o usuario digitar, então esse pi deve ser o proprio vetor, entende? Como declaro isso?

package trabalho; 
public class Quarto {  

    public static void main (String []args){    
       int n, i, m, pi[]; //pi[i] não compila, pois como i é um inteiro que está sendo inicializando não pode ser usado neste momento, e mesmo que 
       // que pudesse ele teria valor ZERO e não faria sentido inicar um vetor de ZERO posições. Segue abaixo uma possível solução.

       n = InOut.leInt("Por favor entre com o numero de postos de agua");//8  
       m = InOut.leInt("Entre com a distancia intermediaria maxima do competidor");  
    
       //Provavél solução:
       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++){  
            pi[i] = InOut.leInt("Entre com a distancia entre os postos de agua");  
       }  
    }  

Seria isso, senão for poderia explicar melhor?

[quote=wfuertes][code]
package trabalho;
public class Quarto {

public static void main (String []args){    
   int n, i, m, pi[]; //pi[i] não compila, pois como i é um inteiro que está sendo inicializando não pode ser usado neste momento, e mesmo que 
   // que pudesse ele teria valor ZERO e não faria sentido inicar um vetor de ZERO posições. Segue abaixo uma possível solução.

   n = InOut.leInt("Por favor entre com o numero de postos de agua");//8  
   m = InOut.leInt("Entre com a distancia intermediaria maxima do competidor");  

   //Provavél solução:
   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++){  
        pi[i] = InOut.leInt("Entre com a distancia entre os postos de agua");  
   }  
}  

[/code]
Seria isso, senão for poderia explicar melhor? [/quote]

Ok, deu certinho sim. Agora o código está dando erro na linha 31, esse programinha deve calcular se a distância entre os postos de água for maior que a distancia intermediaria do competidor o competidor não consegue completar a maratona, se for menor ele consegue completar a maratona.

package trabalho;


public class Quarto {
    
    public static void main (String []args){

        int n, i, m;
        int pi[];
      



        n = InOut.leInt("Por favor entre com o numero de postos de agua");//8
        m = InOut.leInt("Entre com a distancia intermediaria maxima do competidor");
   
 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++){


            
   pi[i] = InOut.leInt("Entre com a distancia entre os postos de agua");
   
}  
    if (n >= 2 && n <= 10000){
               

                if (pi[i] <= m ){

                    System.out.println("S");


            }else{

                    System.out.println("N");

                }
        }
}
    }

Se entendi direito o que tu queres, tua condição deveria estar dentro do for.
Mas qual o erro que está retornando?

[quote=sgaothaich]Se entendi direito o que tu queres, tua condição deveria estar dentro do for.
Mas qual o erro que está retornando?[/quote]

Se eu por a condição dentro do for para cada distancia que eu digitar ele vai imprimir,e não e isso oq ue quero, quero que ele imprima, no final do programa, se o competidor vai conseguir ou não completar a maratona.
O que quero saber tb e como posso tirar a media da distancia desses postos de agua, pois creio que se eu tirar a media desses vetores eu posso fazer uma comparação final com o m(desempenho maximo do competidor) e comparando se ele consegue terminar a maratona ou não.

[quote=Ckralls][quote=sgaothaich]Se entendi direito o que tu queres, tua condição deveria estar dentro do for.
Mas qual o erro que está retornando?[/quote]

Se eu por a condição dentro do for para cada distancia que eu digitar ele vai imprimir,e não e isso oq ue quero, quero que ele imprima, no final do programa, se o competidor vai conseguir ou não completar a maratona.
O que quero saber tb e como posso tirar a media da distancia desses postos de agua, pois creio que se eu tirar a media desses vetores eu posso fazer uma comparação final com o m(desempenho maximo do competidor) e comparando se ele consegue terminar a maratona ou não.[/quote]

Eu pensei que estava certo, mas o professor disse:

"verificar para todas as distâncias informadas, se a distância do posto seguinte
subtraída da distância anterior é menor que a distância que ele consegue correr
sem beber água. Se houver alguma distância maior, então o algoritmo termina com N, senão termina com S."

Como posso fazer isso? Tentei como esta embaixo e não consegui.

for (i=0; i &lt; n; i++){


            
   pi[i] = InOut.leInt(&quot;Entre com a distancia entre os postos de agua&quot;);
  // somaVetor = somaVetor + pi[i];
  // mediaVetor = somaVetor / n;
   sub = pi[1] - pi[0];
} 

    if ((n &gt;= 2 && n &lt;= 10000))//||(somaVetor &lt;= 42195)){
               
           //if (mediaVetor &lt;= m ){
            if (sub &lt;= m){

                    System.out.println(&quot;S&quot;);

            }else{

                    System.out.println(&quot;N&quot;);

                }

[quote=Ckralls][quote=Ckralls][quote=sgaothaich]Se entendi direito o que tu queres, tua condição deveria estar dentro do for.
Mas qual o erro que está retornando?[/quote]

Se eu por a condição dentro do for para cada distancia que eu digitar ele vai imprimir,e não e isso oq ue quero, quero que ele imprima, no final do programa, se o competidor vai conseguir ou não completar a maratona.
O que quero saber tb e como posso tirar a media da distancia desses postos de agua, pois creio que se eu tirar a media desses vetores eu posso fazer uma comparação final com o m(desempenho maximo do competidor) e comparando se ele consegue terminar a maratona ou não.[/quote]

Eu pensei que estava certo, mas o professor disse:

"verificar para todas as distâncias informadas, se a distância do posto seguinte
subtraída da distância anterior é menor que a distância que ele consegue correr
sem beber água. Se houver alguma distância maior, então o algoritmo termina com N, senão termina com S."

Como posso fazer isso? Tentei como esta embaixo e não consegui.

[code]
for (i=0; i < n; i++){

pi[i] = InOut.leInt("Entre com a distancia entre os postos de agua");
// somaVetor = somaVetor + pi[i];
// mediaVetor = somaVetor / n;
sub = pi[1] - pi[0];
}

if ((n &gt;= 2 && n &lt;= 10000))//||(somaVetor &lt;= 42195)){
           
       //if (mediaVetor &lt;= m ){
        if (sub &lt;= m){

                System.out.println(&quot;S&quot;);

        }else{

                System.out.println(&quot;N&quot;);

            }

[/code][/quote]

Pessoal to quase chegando la, o cadigo abaixo esta representando o seguinte erro na linha 23(netbeans)

"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at trabalho.maratona.main(maratona.java:23)
Java Result: 1"
Alguém pode me ajudar?

package trabalho;

public class maratona {
    
    public static void main (String []args){

        int n, i, m, subtra;
        int pi[];
        
       
    
        n = InOut.leInt(&quot;Por favor entre com o numero de postos de agua&quot;);//3
        m = InOut.leInt(&quot;Entre com a distancia intermediaria maxima do competidor&quot;);
   
 pi = new int[n]; //neste caso pi é um vetor com n posições =&gt; número de postos de água;  
          
              

for (i=0; i &lt; n; i++){

                
   pi[i] = InOut.leInt(&quot;Entre com a distancia entre os postos de agua&quot;);
   subtra = pi[i+1]-pi[i]; //o professor disse q era + ou - assim;
   
}
    if ((n &gt;= 2 && n &lt;= 10000)||(m &lt;= 42195)){
               
                      if ( subtra &lt;= m){

                    System.out.println(&quot;S&quot;);

            }else{

                    System.out.println(&quot;N&quot;);

                }
        }
    }
}

Sua exceção diz que está acessando uma posição inexistente no vetor.
Está vendo essa linha:

subtra = pi[i+1]-pi[i]; //o professor disse q era + ou - assim;  

Sabe o que ela tem de errado? Isso:

pi[i+1]

Porque? Porque quando o i for 2, ele vai fazer pi[3], sendo que o pi é:
pi[0], pi[1] e pi[2], entendeu ? Mude sua lógica e/ou faça um tratamento.

[quote=nel]Sua exceção diz que está acessando uma posição inexistente no vetor.
Está vendo essa linha:

subtra = pi[i+1]-pi[i]; //o professor disse q era + ou - assim;  

Sabe o que ela tem de errado? Isso:

pi[i+1]

Porque? Porque quando o i for 2, ele vai fazer pi[3], sendo que o pi é:
pi[0], pi[1] e pi[2], entendeu ? Mude sua lógica e/ou faça um tratamento.[/quote]

então se eu colocar uma condição tipo

if(posto[i+1] < posto[n]){ //nessa condição a variavel subtra so ira receber posto[i+1]-posto[i] se posto[i+1] < posto[n], mas continua dando o mesmo erro
   subtra = posto[i+1]-posto[i];
  }

[quote=Ckralls][quote=nel]Sua exceção diz que está acessando uma posição inexistente no vetor.
Está vendo essa linha:

subtra = pi[i+1]-pi[i]; //o professor disse q era + ou - assim;  

Sabe o que ela tem de errado? Isso:

pi[i+1]

Porque? Porque quando o i for 2, ele vai fazer pi[3], sendo que o pi é:
pi[0], pi[1] e pi[2], entendeu ? Mude sua lógica e/ou faça um tratamento.[/quote]

então se eu colocar uma condição tipo

if(posto[i+1] < posto[n]){
   subtra = posto[i+1]-posto[i];
  }

[/code][/quote]

Não, acho que você não entendeu o que eu quis dizer.
Vou explicar:

[code]int[] vet = new int[3] {1, 2, 3};
System.out.println(vet[0]);
System.out.println(vet[1]);
System.out.println(vet[2]);
// vai gerar exceção "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
System.out.println(vet[3]);

Estou usando uma posição inexistente, inválida, do vetor e gera a exceção.
Grosseiramente, a sua verificação teria de ser algo como:

int index = i + 1;
if(index < n) {
    pi[index];
}

Entendeu ?
Assim tu garante que o i+1 não vai acessar uma posição inexistente do vetor.

[quote=nel][quote=Ckralls][quote=nel]Sua exceção diz que está acessando uma posição inexistente no vetor.
Está vendo essa linha:

subtra = pi[i+1]-pi[i]; //o professor disse q era + ou - assim;  

Sabe o que ela tem de errado? Isso:

pi[i+1]

Porque? Porque quando o i for 2, ele vai fazer pi[3], sendo que o pi é:
pi[0], pi[1] e pi[2], entendeu ? Mude sua lógica e/ou faça um tratamento.[/quote]

então se eu colocar uma condição tipo

if(posto[i+1] < posto[n]){
   subtra = posto[i+1]-posto[i];
  }

[/code][/quote]

Não, acho que você não entendeu o que eu quis dizer.
Vou explicar:

[code]int[] vet = new int[3] {1, 2, 3};
System.out.println(vet[0]);
System.out.println(vet[1]);
System.out.println(vet[2]);
// vai gerar exceção "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
System.out.println(vet[3]);

Estou usando uma posição inexistente, inválida, do vetor e gera a exceção.
Grosseiramente, a sua verificação teria de ser algo como:

int index = i + 1;
if(index < n) {
    pi[index];
}

Entendeu ?
Assim tu garante que o i+1 não vai acessar uma posição inexistente do vetor.[/quote]

ok, tentei fazer assim:

[code]

if (index < n){

   subtra = posto[index] - posto[i];
   [/code]

mas da erro: “Exception in thread “main” java.lang.RuntimeException: Uncompilable source code - variable i might not have been initialized
at trabalho.maratona.main(maratona.java:9)
Java Result: 1”

nessa linha :

int index = i + 1;

Cadê a variavél i?
Poste o código só completo novamente com as novas alterações :slight_smile:

[quote=nel]Cadê a variavél i?
Poste o código só completo novamente com as novas alterações :)[/quote]

package trabalho;

public class maratona {
    
    public static void main (String []args){

        int n, i, m, subtra=0;
        int posto[];
        int index = i + 1;
       
       
    
        n = InOut.leInt("Por favor entre com o numero de postos de agua");//3
        m = InOut.leInt("Entre com a distancia intermediaria maxima do competidor");
   
 posto = new int[n]; //neste caso pi é um vetor com n posições => número de postos de água;  
          
              
if ((n >= 2 && n <= 10000)&& (m <= 42195)){
    
    for (i=0; i < n; i++){

                
   posto[i] = InOut.leInt("Entre com a distancia entre os postos de agua");
   
   
   if (index  < n){    
        
       posto[index];
       
       if ( posto[index] <= m){

                    System.out.println("S");

            }else{

                    System.out.println("N");

                }
        }
    }
}
    }
}

Cara, você só está copiando e colando, não está parando para ver o código, faça com calma.
Você não inicializou a variavél i, não tem o que ela somar.

Veja modificação:

[code]
for (i=0; i < n; i++){
int index = i + 1;

posto[i] = InOut.leInt(“Entre com a distancia entre os postos de agua”);

if (index < n){
if ( posto[index] <= m){
System.out.println(“S”);
}else{
System.out.println(“N”);
}
}
}
}[/code]

Veja que eu declaro a variavél index dentro do laço de repetição, pois esse valor deve ser atualizado a todo momento.
Você precisa fazer verificação constante disso de modo o índice seja atualizado.

Faça com calma, pensa, leia o que eu disse e os outros e tenho certeza que tu vai conseguir :slight_smile: