Ler um vetor e mostrar

9 respostas
F

Estou fazendo um exercício pra mostrar a posição dos elementos de um vetor, que são 15, e verificar quais dos elementos são iguais a 30.

O que consegui fazer foi isso:

import java.util.*;
class Vetor{
	public static void main(String args[]){
	   Scanner ler= new Scanner(System.in);
                        
    int p[] = new int [15];

                       for( p[]=0; p[]<= 15; p++){
                                                 
    System.out.println("Digite um valor para a posição" +p[] + "do vetor");
                         p[]=ler.nextInt();

                         }

		
		
	}
	
	
}

Agora, as dúvidas:

1) Na declaração das variáveis, eu tenho que colocar
int p[] = new int [15];
ou
int p[0] = new int [15]; ?
Estou pensando que é posição zero, então, p[0].

int p[]= new int [15] 'diz' ao java que se trata de um vetor?
Estou meio confuso com isso porque comecei aprendendo portugol.

2) Na entrada de dados, é
System.out.println("Digite um valor para a posição" +p[] + "do vetor" ) ;
ou
System.out.println("Digite um valor para a posição" +p[0] + "do vetor" ) ; ?

3) Pra saber se algum dos elementos contém o número 30, eu devo fazer um if pra cada um deles? Estou achando que não, pois é muito trabalhoso. Mas é a única idéia que tenho.

Obs: por favor não coloquem o código pronto. Estou tentando fazer.

Obrigado.

9 Respostas

ViniGodoy

Java != C++.

  1. Na declaração você coloca:
    int p[] = new int[15]; ou
    int []p = new int[15];

A primeira forma é mais comum.

  1. Você vai precisar de uma variável contadora no for. Do contrário do C++, não tem como se deslocar pelo "ponteiro do vetor" diretamente.

for( int i = 0; ; i < p.length; i++){ System.out.println("Digite um valor para a posição" +p[i] + "do vetor"); p[i]=ler.nextInt(); }

  1. Use um for (como mostrado aqui no item 2) e teste se p[i] == 30.
T

int p[] = new int[15], ou melhor ainda, int[] p = new int[15]. Ambas as formas se lêem, em português: declare um array de int chamado p, e inicialize-o com um novo array de int de 15 posições.

Nem um nem outro. O certo é:

for( int i =0;  i < 15; i++){  
        System.out.println ("Digite um valor para a posição " + i + " do vetor");
        p[i] = ler.nextInt();
    }

Não confunda um array § com o índice dele (que neste caso chamei de i).

É isso mesmo*, a menos que o array já esteja ordenado anteriormente - nesse caso você só precisaria achar o primeiro valor igual a 30 e ir contando sucessivamente até chegar a um elemento diferente de 30. Como no seu caso o array não é ordenado, você tem de comparar um por um. Qual é o problema com isso? Computadores são máquinas que são feitas para percorrer listas…

  • EDIT - nem pensei que o que ele estava perguntando era “Eu preciso fazer um código semelhante ao seguinte:”
if (p[0] == 30) System.out.println ("O elemento 0 é igual a 30");
    if (p[1] == 30) System.out.println ("O elemento 1 é igual a 30");
    if (p[2] == 30) System.out.println ("O elemento 2 é igual a 30");
...
    if (p[14] == 30) System.out.println ("O elemento 14 é igual a 30");

É claro que não é para fazer essa montanha de if’s; é para seguir o que o ViniGodoy sugeriu (usar um “for”).

JHugo

1) Na declaração das variáveis, eu tenho que colocar
int p[] = new int [15];
ou
int p[0] = new int [15]; ?
Estou pensando que é posição zero, então, p[0].

Declarando int p[0] = new int [15]; você estará criando um novo vetor de 15 posições na posição 0, ou seja, ficaria um array multi-dimensional.

Acredito que sua real necessidade é como vc mostrou a 1ª declaração.


2) Na entrada de dados, é
System.out.println(“Digite um valor para a posição” +p[] + “do vetor” ) ;
ou
System.out.println(“Digite um valor para a posição” +p[0] + “do vetor” ) ; ?

// Imprime a posição 0 do vetor p System.out.println("Digite um valor para a posição" +p[0] + "do vetor" ) ;

Faça um for passando por todos os elementos e comparar um a um se é igual a 30.

Tem um tópico legal no JavaFree falando muito sobre declarações e arrays.
http://www.javafree.org/javabb/viewtopic.jbb?t=6936

[]´s

F
import java.util.*;
class Vetor{
	public static void main(String args[]){
	   Scanner ler= new Scanner(System.in);
            int i;
                        
            int p[] = new int [15];

              for(i=0; i<= p.length; i++){
                    
                                          
 System.out.println("Digite um valor para a posição " +i + " do vetor");
             p[i]=ler.nextInt();

             }

              for( i=0; i<=p.length; i++){
                if(p[i] ==30){
              System.out.println("O valor se encontra na posição " + i);
                }else{
                
              System.out.println("Não existe 30 em nenhuma posição");
                    }
              }
                       
	}
	
	
}

Depois que digito os valores, recebo
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
at Vetor.main(Vetor.java:16)

Sei que ele está acessando um índice que não existe, mas não estou vendo onde pode estar o erro.

JHugo
for( i=0; i<=p.length; i++){

A excessão foi lançada porque você tentou acessar um elemento do array que não existe. Tenta colocar p.length-1;

Porque se começa em 0 vai até 14, se vc tivesse começado em 1, aí sim, iria até o 15.

[]´s

ViniGodoy

Ahem… Felipe, no código que eu coloquei ali em cima, usei o sinal de <, não <=

Esse = aí foi por sua conta… :slight_smile:

F

:) Tá, eu tirei.

Só mais uma coisa. Espero não estar abusando.

Ele apresenta
30 se encontra na posição 2(por exemplo)
Não existe 30 em nenhuma posição

Coloquei a condição fora do laço(System.out.println("Não existe 30 em nenhuma posição" ) ; ) . Por que mesmo assim ele chega até ele??

import java.util.*;
class Vetor{
	public static void main(String args[]){
	   Scanner ler= new Scanner(System.in);
            int i;
                        
            int p[] = new int [5];

              for(i=0; i< p.length -1; i++){ 
                                          
 System.out.println("Digite um valor para a posição " +i + " do vetor");
             p[i]=ler.nextInt();

             }

              for( i=0; i<p.length; i++){
                if(p[i] ==30){
              System.out.println("30 se encontra na posição " + i);
                }else{
                
              
                   }
              
              
              }
   
                System.out.println("Não existe 30 em nenhuma posição");
	
	
	}
	

	
}
>
ViniGodoy

Seu código termina o laço e, depois disso, continua.

Existem comandos que interrompem o fluxo. Um deles é o return, que irá fazer o Java sair da função corrente (e, se ela retornar valor, retornar um valor).

No caso do seu programa, você pode fazer assim (já aproveitei e retirei aquele else inútil. Não é obrigatório ter um if num else):

import java.util.*;
class Vetor{
   public static void main(String args[]){
      Scanner ler= new Scanner(System.in);
      int i;
                        
      int p[] = new int [5];

      for(i=0; i< p.length -1; i++) { 
            System.out.println("Digite um valor para a posição " +i + " do vetor");
            p[i]=ler.nextInt();
      }

      for( i=0; i<p.length; i++){
         if(p[i] ==30){
            System.out.println("30 se encontra na posição " + i);
            return; //Sai do main.
         }
      }
   
      System.out.println("Não existe 30 em nenhuma posição");
   }
}
>
F

Obrigado, eu não sabia que poderia colocar return aí.

Criado 19 de dezembro de 2007
Ultima resposta 20 de dez. de 2007
Respostas 9
Participantes 4