[RESOLVIDO] - Calcular media em Interface Gráfica JAVA

7 respostas Resolvido
joptionpaneljavascriptjavaarraylist
R

ATUALIZAÇÃO

Preciso saber como verificar se o usuario digitou um numero no JOptionPane.
Se ele digitou um numero vai aparecer uma mensagem : Adicionado com Sucesso!
Se ele digitou qualquer outro caracter vai aparecer uma mensagem: Digite apenas numeros!

Porem quero que ele possa continuar a digitar. Código do JTextField abaixo

private void BotaoOkActionPerformed(java.awt.event.ActionEvent evt) {

int numero = new Integer (BoxTexto.getText());
    
    int soma=0;
    int entradaDados;
    
    
    for (int n = 1; n<=numero; n++)
    {
                
            entradaDados = Integer.valueOf(JOptionPane.showInputDialog("Digite o Numero "+n));
            soma = soma+entradaDados;
            JOptionPane.showMessageDialog(null, "Adicionado com sucesso!");
    }        
                                  
        
    JOptionPane.showMessageDialog(null, "A Média Aritmética é: "+(soma/numero));
    
}

Olá pessoal, sou iniciante em Java e bem leigo no assunto ainda. O professor passou um trabalho (detalhes abaixo) e estou com dificuldades para finaliza-lo e queria pedir a ajuda de vocês pois este vale a 50% da nota.

Consegui já fazer as primeiras etapas (1 e 2 ) mas estou com problemas para fazer a 3 pois não entendo nada desta parte de “Interface Grafica”. Então queria ajuda para resolver esta parte apenas.

********** ATUALIZAÇÃO************
A “interface gráfica” deve ser construida por meio de Tela com JFrame

1-)Fazer uma classe Ex1Array com as seguintes características:
–Atributos: arrayde inteiros e duas variáveis para controlar o número atual e máximo de elementos inseridos no array
–Métodos:
•Construtor que recebe o tamanho do arraycomo parâmetro e inicializa o objeto (cria array, etc.)
•publicbooleanadicionar(intn) -adiciona elemento ao final do array, retornando truese bem sucedido e falsecaso contrário
•publicintcalculaMedia() –retorna a média aritmética dos números armazenados no array

Fazer a classe Ex1ArrayControle que:
–Pergunta, via console, qual o tamanho N do arrayque o usuário quer instanciar
–Instancia um objeto da classe Ex1Array, passando N como argumento
–Pergunta N números ao usuário e armazena no objeto instanciado
–Chama o método para calcular a média aritmética e mostra o resultado

  1. Adaptar o exercício 1 para utilizar um objeto da classe ArrayListao invés de um arraycomum.

  2. Adaptar o exercício 2 usando Interface Gráfica do Netbeans.

Classe Controle Main

import java.util.Scanner;
import javax.swing.*;

public class Ex1ArrayControle {

private static Scanner input;

public static void main(String[] args) {
    input = new Scanner(System.in);


    System.out.println("Insira a quantidade de elementos a serem calculados: ");
    int n = input.nextInt();
    Ex1Array array1 = new Ex1Array();

	
    for (int i = 1; i <= n; i++) {
        System.out.println("Insira o " + i + "/" + n + " valor a ser calculado: ");
        boolean foiSucedido = array1.adicionar(input.nextInt());
        if (foiSucedido) {
            System.out.println("Execução bem sucedida. \n");
        } else {
            System.out.println("Falha na execução. \n");
            break;
        }

    }


    System.out.println("A média dos valores inseridos é: " + array1.calculaMedia());

}

}

Classe ArrayList

import java.util.ArrayList;

public class Ex1Array {

private int nMaximoElementosArray, nAtualElementosArray;
private int[] arrayInteiros;
private ArrayList<Integer> arrayListInteiros = new ArrayList<Integer>();


public Ex1Array(int n) {
    this.nMaximoElementosArray = n;
    this.nAtualElementosArray = 0;
    this.arrayInteiros = new int[nMaximoElementosArray];

}

public Ex1Array() {
    this.nAtualElementosArray = 0;
    this.arrayListInteiros = new ArrayList<Integer>();
}


public boolean adicionar(int n) {
    boolean sucesso;

    this.arrayListInteiros.add(n);
    this.nAtualElementosArray++;
    sucesso = true;
    /*
     #### PARTE UTILIZANDO ARRAY NORMAL ####
			 
     if (this.nAtualElementosArray < this.nMaximoElementosArray)
     {
     int index = (this.nMaximoElementosArray - 1) - this.nAtualElementosArray;
     this.arrayInteiros[index] = n;
     this.nAtualElementosArray ++;
     sucesso = true;
     }
     else 
     {
     sucesso = false;
     }*/

    return sucesso;
}

public int calculaMedia() {
    int media = 0;

    /*
     for (int i = 0; i < this.arrayInteiros.length; i++) 
     {
     media += this.arrayInteiros[i];
     }
     media /= this.nAtualElementosArray;
     */
    for (int i = 0; i < this.arrayListInteiros.size(); i++) {
        media += this.arrayListInteiros.get(i);
    }
    media /= this.arrayListInteiros.size();
    return media;
}

}

7 Respostas

lvbarbosa

Essa descrição “Interface Gráfica do NetBeans” não é muito boa, porque pode te guiar pro lado errado. Eu acredito que o exercício quer que você faça é construir uma aplicação utilizando o framework de interfaces gráficas Swing, do Java. O NetBeans entra nessa história porque tem uma funcionalidade que te ajuda a construir as janelas com arrasta-e-solta, gerando o código fonte para você durante esse processo.

Dá uma estudada nisso que você consegue se virar.

http://www.caelum.com.br/apostila-java-testes-xml-design-patterns/interfaces-graficas-com-swing/

R

Sim, ficou bem vaga a exigencia. Consegui entrar em contato com o professor e ele disse que a interface grafica seria Tela com JFrame. Não aprendi em sala nada disso, dei uma lida no artigo que você me mostrou, principalmente na parte do JFrame e ainda não consegui entender o que eu devo fazer.

lvbarbosa

Você basicamente tem que fazer com que a interação entre usuário e o teu programa seja feita por uma interface gráfica, que o Swing vai te ajudar a criar.

A linha de comando é um exemplo de interação. Você faz perguntas, o usuário responde e você utiliza esses dados para guiar a execução do programa. Com a interface gráfica também é desse jeito. Você vai criar as telas, campos de texto e botões, por onde o usuário vai interagir com o teu programa.

O JFrame é a abstração do Swing para uma janela. No JFrame você vai colocar os botões (JButton), caixas de texto (JTextField), textos explicativos (JLabel), etc. Você pode dizer pro java: quando o usuário clicar nesse botão aqui, chame esse método dessa classe, por exemplo.

No NetBeans, na tela de criar um novo arquivo, você pode colocar na parte de GUI Swing e criar um JFrame se não me engano, e ele abre a janela de edição arrasta-e-solta. Isso nada mais é do que uma facilidade. Você vai ver que é criado uma classe Java para a interface gráfica. Quando você joga componentes dentro da janela (ou reorganiza eles), o NetBeans mexe nessa classe, criando e editando o código para você, relacionado à interface e aos eventos gerados pelo usuário.

R

Ficou bem mais claro agora, valeu. Vou tentar criar então. Em caso de dúvidas ou eu não conseguir vou postar uma nova mensagem.

R

Consegui Fazer mas agora estou com uma duvida. Como faço para verificar se é digitado apenas numeros e caso nao seja apareça uma mensagem de erro e o usuario digita novamente?
Codigo lá em cima

lvbarbosa
Solucao aceita

Eu não sei os métodos decorados das classes do Swing, mas vou assumir que você conseguiu extrair a input do usuário como String, certo? Uma das formas de fazer é assim:

String inputDoUsuario = ...; // pega do JOptionPane
int num;
try {
    num = Integer.parseInt(inputDoUsuario);
    soma += num;
    JOptionPane.showMessageDialog(null, "Adicionado com Sucesso!");
} catch (NumberFormatException e) {
    // Essa Exception é lançada quando o usuário não informa um número válido
}

O método Integer.parseInt(String s) vai tentar converter uma String no tipo primitivo int. É a mesma coisa do Integer.valueOf(String s), sendo que esse último retorna um objeto do tipo Integer, e não o primitivo int.

A ideia é que você capture essa exceção e aja de acordo dentro do bloco catch. No caso, como você está dentro de um laço de repetição, eu diria para você exibir alguma mensagem ao usuário (como “Entrada inválida, tente novamente”) e decrementar a variável de controle do laço, para que o laço seja repetido mais uma vez.


Algumas informações extras:

Na prática, qualquer um desses dois métodos vai fazer o que você precisa. Contudo, já que você está usando primitivos int, eu diria para você utilizar o parseInt ao invés do valueOf, porque quando você faz:

int x = Integer.valueOf("1");

O Java vai ter que converter de objeto Integer para primitivo int. Essa conversão é transparente para o programador, mas algumas instruções a mais são executadas, o que pode acarretar em perda de performance em casos onde essa conversão é feita muitas vezes. O nome dessa conversão, de primitivo para objeto (int para Integer) é Autoboxing. O movimento contrário, de objeto para primitivo, é chamado de Unboxing.

R

Valeu cara, foi exatamente o que eu fiz ontem, mas com algumas modificações, pois era necessario usar um break no catch junto com uma variavel de controle para que a media não aparecesse caso o usuario digitasse uma letra e o programa voltasse.

Em relação ao valueOf eu deixei ele porque um erro que eu percebi mais tarde foi que a media era um int e não float. Eu então mantive o valueOf porque apenas minha entrada de dados é int, já a soma e media são float então desse jeito eu posso manter o programa sem dar erros.

Criado 12 de junho de 2017
Ultima resposta 16 de jun. de 2017
Respostas 7
Participantes 2