Ler um vetor e mostrar

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:

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

                     }

	
	
}

}[/code]

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.

  1. 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" ) ; ?

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

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.

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”).

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

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.

[quote]
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” ) ; ?[/quote]

// 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

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

}[/code]

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.

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

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:

:slight_smile: 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??

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


}

}[/code]>

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

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

}
}[/code]
>

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