No código abaixo, por favor me informem onde estão os erros.
Quando indico a PA de teste 2, 4, 6, 8, 10, ele informa que é PA
Quando indico qualquer outro valor também informa que é PA
Quando coloco a PG 3, 15, 375, 1875, ele também informa que é uma PA
O que eu faço?
import java.util.Scanner;
/* Escreva uma aplicação que deverá receber uma sequencia de 05 valores
* numéricos que poderá ser uma progressão aritmética ou uma progressão
* geométrica, esta aplicação deverá identificar qual é a progressão.
*/
public class Exercicio {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int vet[] = new int[5];
int i = 0, teste1, teste2, teste3, teste4;
for (i = 0; i < vet.length; i++) {
System.out.print("Entre com o "+(i+1)+"º valor: ");
vet[i] = sc.nextInt();
}
//identifica PA
teste1 = (vet.length + vet[0]);
System.out.println("Teste1: "+teste1);
teste2 = (vet[0]+1 + vet.length-1);
System.out.println("Teste2: "+teste2);
//identifica PG
teste3 = ((vet.length) / ((vet.length)-1));
System.out.println("Teste3: "+teste3);
teste4 = ((vet[1]) / (vet[0]));
System.out.println("Teste4: "+teste4);
if(teste1 == teste2){
System.out.println("PA");
}else{
if(teste3 == teste4){
System.out.println("PG");
}else{
System.out.println("Não é uma progressão");
}
}
}
}
Sua dificuldade é com matemática. Em uma PA, nós temos que a diferença entre dois termos consecutivos é igual a uma constante, que chamarei de “r”. Assim, para saber se uma sequencia representa uma PA, você deve verificar todos os termos e vê se a regra
vet[n] - vet[n-1] = r;
vale para a sequência inteira.
No caso de uma PG, a razão entre dois termos consecutivos é uma constante que chamarei de q. Sendo assim, para saber se a sequência forma uma PG você deve avaliar se a seguinte regra vale para todos os elementos:
vet[n] - vet[n-1] = q;
Em ambos os casos, você pega os dois primeiros termos do seu vetor e obtém a constante necessária para avaliar as progressões (constante essa que é chamada de razão). Depois é só iterar pelo vetor e vê se a razão entre os termos consecutivos se mantém constante.
Se vc quer comparar o conteúdo dos arrays tem utilizar (teste1.equals(teste2))
Um array em java é um objeto e representa uma referencia na memória então se vc comparar teste1 == teste2
Estará comparando a posição na memória e é claro que são diferente pois cada um ocupa uma posição diferente na memório.
[quote=Demys Cota]Se vc quer comparar o conteúdo dos arrays tem utilizar (teste1.equals(teste2))
Um array em java é um objeto e representa uma referencia na memória então se vc comparar teste1 == teste2
Estará comparando a posição na memória e é claro que são diferente pois cada um ocupa uma posição diferente na memório.[/quote]
Isso está errado. O programa dele não funciona porque a lógica está errada. Para tipos primitivos ele pode fazer a comparação usando ==. Se fosse um vetor de objeto, nesse caso ele teria de usar o método equals.
Vamos melhorar a pergunta:
Eu sei como somar e subtrair valores dentro de um mesmo vetor, mas como eu calculo o produto e a divisão dos valores de um mesmo vetor?
Exemplo: Como eu faço para multiplicar vet[0] por vet[1], dividir vet[1] por vet[0] e assim sucessivamente?
Bom, você pode colocar um índice no vetor.
for(int i = 2; i < vet.length; i++)
{
r = (vet[i] - vet[i-1]);
}
É isso que você quer?
Matheus vc tá certo, ñ tinha prestado atenção, deculpe minha ignorância
Sem problema.
GilsnSilva, você resolveu seu problema?