Calculo do expoente de vários números inseridos pelo uti

7 respostas
S
Boas, Sou novo por aqui e estou agora a começar a aprender java e surgiu-me uma dúvida quando pretendo calcular diferentes números com o mesmo expoente. É pedido ao utilizador para definir quantas vezes quer fazer o cálculo e é pedido um novo número todas as vezes. À 1º faz o calculo correto, mas depois não sei como fazer para voltar a fazer o looping apenas com o novo número! O que fiz foi isto:
public static void main(String[] args) {
        int i, base, exp, result = 1;
        Scanner input = new Scanner(System.in);
        System.out.println("Introduza o número de séries");
        int n = input.nextInt();
        System.out.println("Introduza o expoente");
        exp = input.nextInt();
        
        for( int x = 0; x < n ; x++)   {  
            System.out.println("Insira um numero");
            base = input.nextInt();
        for (i = 1; i <= exp; i++) {

            result = result * base;

        }
        System.out.printf("\n\n%d elevado a %d = %d", base, exp, result);
        }
        
    }

Obrigado pessoal :)

7 Respostas

Rodrigo_Sasaki

O melhor a fazer nesses casos, é usar um laço while que por definição deve ser usado quando não sabemos o número de vezes que o bloco de código deve ser repetido.

Vamos supor que quero que meu código se repita até um valor booleano ter valor false. Seria algo assim:
boolean repetir = true;
while(repetir){
    // executo meu código

    // Pergunto se o usuário deseja continuar, e atribuo esse valor à minha variável
}
Entendeu?
RodrigoKaos

O teu programa ta acumulando o valor de result, por isso o erro, vc precisa “resetar” o valor dessa variável a cada ciclo do for.
Assim vai funcionar corretamente

V
import java.util.Scanner;


public class Expoente {
	// X[elevado a n] = r;
	long x, n, r = 1;
	
	Expoente(){
		init();
	}
	
	private void init(){
		Scanner input = new Scanner(System.in); 
		System.out.print("Digite um número inteiro (X): ");
		x = input.nextLong();
		System.out.print("Digite um número inteiro para elevar X (N): ");
		n = input.nextLong();
		
		System.out.println("X: " + x + "; N: " + n);
		for(int i = 0; i < n+1; i++){
			r *= x;
			if(i == 0){
				r = 1;
			}
			System.out.println(x + "^" + i + " = " + r);
		}
	}
	public static void main(String arg[]){
		Expoente e = new Expoente();
	}
}
S

primeiro pare de usar o int n = input.nextInt();

não use nextInt

prefira o nextLine
e depois converta ou converta direto na leitura

variavel = Integer.parseInt(scanner.nexLine()) e por aí vai
só dei o código para exemplo

pois dependendo da sua jdk vai dar pau

agora o outro problema o pessoal já respondeu

S

Muito obrigado galera :), são todas grandes ajudas!

Assim que tiver tempo e conseguir resolver posto aqui o resultado… Vou tentar de todas as formas :slight_smile:

S

Afinal a solução era apenas colocar o "result=1" no 1º for que conta a entradas! :D

public static void main(String[] args) {
        int i, base, exp, result = 1;
        Scanner input = new Scanner(System.in);
        System.out.println("Introduza o número de séries");
        int n = input.nextInt();
        System.out.println("Introduza o expoente");
        exp = input.nextInt();
        
        for (int x = 0; x < n; x++) {
            System.out.println("\nInsira um numero");
            base = input.nextInt();
            System.out.println(" A base escolhida : " + base); /* para que a váriavel result não fique com o valor do primeiro looping*/ 
            result = 1;
            
            for (i = 1; i <= exp; i++) {
                result = result * base;
                System.out.println(" Resulta: " + result);
            }
            System.out.printf("\n\n%d elevado a %d = %d\n", base, exp, result);
        }
    }
}
RodrigoKaos

Vc só precisava resetar ela antes da multiplicação, n importava em qual for seria

Criado 2 de setembro de 2013
Ultima resposta 7 de set. de 2013
Respostas 7
Participantes 5