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:
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.
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" ) ; ?
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.
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.
[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.
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");
}
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");