Declarando vetor em java[Quase Resolvido]

15 respostas
C

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



    }


    }

15 Respostas

drsmachado

Cara, se a dúvida é essa

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

Era isso?

C

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

<blockquote>
//vetor de inteiros de 100 posições
int vetor[] = new int[100];

Era isso?

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?

wfuertes
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?

C
wfuertes:
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?

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

                }
        }
}
    }
sgaothaich

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

C

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

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.

C

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

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.

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

            }else{

                    System.out.println("N");

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

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.

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

                }

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

                }
        }
    }
}
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.

C

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.

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];
  }
nel
Ckralls:
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.

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

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

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

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.

C
nel:
Ckralls:
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.

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

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

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

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.

ok, tentei fazer assim:

if (index  < n){    
        
       subtra = posto[index] - posto[i];

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;
nel

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

C

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

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

                }
        }
    }
}
    }
}
nel

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:

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

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 :)

Criado 19 de setembro de 2011
Ultima resposta 20 de set. de 2011
Respostas 15
Participantes 5