Rešeno Pomoc za izradu Java AWT calculatora

rankoni

Početnik
Poruka
16
Molim za pomoc oko ovog koda. Potrebno je da uradim kalkulator u AWT-u u Javi. Pocetnik sam i jako se mucim da privedem kod do kraja. Postavio sam sve sto sam znao ali imam negde gresku u if petlji ili tu negde. Kada unesem brojeve uvek mi izracunava samo poslednju operaciju u petlji. Nikako da ga nateram da primenjuje i ostale racunske operacije.
Molim vas za pomoc ako neko moze da ispise kod kako treba za taj deo. Ne vidim gde gresim.
Evo i koda:

Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class Calculator {

    public static void main(String[] args) {
        Frame f = new Frame("Calculator");
        f.setLayout(new FlowLayout());
        f.setSize(400, 330);
        f.setVisible(true);

        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        Label naslov = new Label("Mini AWT Calculator");
        Label l1 = new Label("Unesite prvi broj");
        Label l2 = new Label("Unesite drugi broj");
        Label l3 = new Label("Rezultat:");
        Label l4 = new Label("Izbor operacije");

        TextField t1 = new TextField();
        TextField t2 = new TextField();
        TextField t3 = new TextField();

        naslov.setBounds(150, 50, 200, 20);
        l1.setBounds(50, 100, 120, 25);
        l2.setBounds(50, 140, 120, 25);
        l3.setBounds(50, 240, 120, 25);
        l4.setBounds(50, 180, 120, 25);

        t1.setBounds(200, 100, 120, 20);
        t2.setBounds(200, 140, 120, 20);
        t3.setBounds(200, 240, 120, 30);

        Choice mychoice = new Choice();
        mychoice.add("+");
        mychoice.add("-");
        mychoice.add("*");
        mychoice.add("/");

        mychoice.setBounds(200, 180, 120, 20);

        Button b1 = new Button("Izračunaj");
        b1.setBounds(200, 208, 120, 25);

        t1.setBackground(Color.white);
        t2.setBackground(Color.white);
        t3.setBackground(Color.pink);
        f.setBackground(Color.yellow);

        f.setLayout(null);
        f.add(mychoice);
        f.add(naslov);
        f.add(l1);
        f.add(l2);
        f.add(l3);
        f.add(l4);
        f.add(t1);
        f.add(t2);
        f.add(t3);
        f.add(b1);

        b1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                int n1 = Integer.parseInt((t1.getText()));
                int n2 = Integer.parseInt((t2.getText()));
                //int n3  = Integer.parseInt((t3.getText()));

                 String s = mychoice.getSelectedItem();

                    if (e.getSource()==mychoice);{
                    t3.setText(String.valueOf(n1+n2));

                    if (e.getSource()==mychoice);
                    t3.setText(String.valueOf(n1-n2));

                    if (e.getSource()==mychoice);
                    t3.setText(String.valueOf(n1*n2));

                    if (e.getSource()==mychoice);
                    t3.setText(String.valueOf(n1/n2));}
            }
        });
    }
}
 
Poslednja izmena od moderatora:
Ево нађох ово на нету, ваљда ће ти бити од користи. Колико видим код се поклапа са твојим, и визуелно верујем да је идентичан. Бар тако код показује:

Java:
import java.awt.*;
import java.awt.event.*;
 
class Calculator implements ActionListener
{
    //Deklaracija objekata
    Frame f=new Frame();
    Label l1=new Label("Prvi broj");
    Label l2=new Label("Drugi broj");
    Label l3=new Label("Rezultat");
    
    TextField t1=new TextField();
    TextField t2=new TextField();
    TextField t3=new TextField();
    
    Button b1=new Button("+");
    Button b2=new Button("-");
    Button b3=new Button("*");
    Button b4=new Button("/");
    Button b5=new Button("Otkazi");
    
    Calculator()
    {
        //Koordinate
        l1.setBounds(50,100,100,20);
        l2.setBounds(50,140,100,20);
        l3.setBounds(50,180,100,20);
        
        t1.setBounds(200,100,100,20);
        t2.setBounds(200,140,100,20);
        t3.setBounds(200,180,100,20);
        
        b1.setBounds(50,250,50,20);
        b2.setBounds(110,250,50,20);
        b3.setBounds(170,250,50,20);
        b4.setBounds(230,250,50,20);
        b5.setBounds(290,250,50,20);
        
        //Dodavanje komponenti frejmu
        f.add(l1);
        f.add(l2);
        f.add(l3);
        
        f.add(t1);
        f.add(t2);
        f.add(t3);
        
        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.add(b4);
        f.add(b5);
        
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        
        f.setLayout(null);
        f.setVisible(true);
        f.setSize(400,350);
    }
    
    public void actionPerformed(ActionEvent e)
    {
        int n1=Integer.parseInt(t1.getText());
        int n2=Integer.parseInt(t2.getText());
        
        if(e.getSource()==b1)
        {
            t3.setText(String.valueOf(n1+n2));
        }
            
        if(e.getSource()==b2)
        {
            t3.setText(String.valueOf(n1-n2));
        }
        
        if(e.getSource()==b3)
        {
            t3.setText(String.valueOf(n1*n2));
        }
        
        if(e.getSource()==b4)
        {
            t3.setText(String.valueOf(n1/n2));
        }
        
        if(e.getSource()==b5)
        {
            System.exit(0);
        }
    }
    
    public static void main(String...s)
    {
        new Calculator();
    }
}
 
Hvala na odgovoru ali to nije to. Taj kod sam video i ja. U tom kodu sa interneta su koriscene buttoni za izbor racunske operacije i kroz if petlju su birani jedno po jedno dugme i operacija. I to funkcionise.
Kod mene je situacija da moram da koristim padajuci meni (choice) umesto buttona, i kada njega primenim u ActionListener logiku i u if petlju, kalkulator mi vidi samo poslednju vrednost iz petlje (operaciju deljenja) i svaki broj mi uvek samo uradi deljenje. Ostale kontrole za operacije preskoci u petlji. Ne znam gde gresim u samoj petlji. Zasto mi izvrsavanje preskace petlju i radi samo krajnju.?
Da li mi tu mozete pomoci.?
Nisam pri kompu i ne mogu da prikazem kako kod mene to izgleda, ali vrlo je slican kao taj sa interneta osim sto nema dugmad nego padajuci meni za izbor operacija.
 
Isprobao sam. Skinuo sam tacku-zarez kod krajeva if-a, i sad uopste nece da racuna nista. Unesem brojeve i kad stisnem da izracuna nista ne izlazi. Nema rezultata. Tako da nije ni to problem. Ne znam vise sta je i gde je greska. Poludecu od ovoga. Danima pokusavam da ga nateram da proradi i nece.
 
Мислио сам на ово:
Java:
if (e.getSource()==mychoice){
                    t3.setText(String.valueOf(n1+n2));
}
if (e.getSource()==mychoice) {
                    t3.setText(String.valueOf(n1-n2));
}
if (e.getSource()==mychoice) {
                    t3.setText(String.valueOf(n1*n2));
}
if (e.getSource()==mychoice) {
                    t3.setText(String.valueOf(n1/n2));}
}
 
Мислио сам на ово:
Java:
if (e.getSource()==mychoice){
                    t3.setText(String.valueOf(n1+n2));
}
if (e.getSource()==mychoice) {
                    t3.setText(String.valueOf(n1-n2));
}
if (e.getSource()==mychoice) {
                    t3.setText(String.valueOf(n1*n2));
}
if (e.getSource()==mychoice) {
                    t3.setText(String.valueOf(n1/n2));}
}
Ostaje jos samo da vidi koji je getSelectedItem, dal je "+", "-" znaci osim if(e.getSource() == mychoice && s == "+" ).... itd
 
Evo i mene. Sve sam uradio kako ste rekli ali kod i dalje ne radi. Sada uopste ne radi ni jedna operacija. Molim Vas da detaljno neko pogleda svaku tacku-zarez, zagradu, itd..... Ja vise ne znam gde gresim. Kod trenutno izgleda ovako:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class Calculator {
public static void main(String[] args) {
Frame f = new Frame("Calculator");
f.setLayout(new FlowLayout());
f.setSize(400, 330);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Label naslov = new Label("Mini AWT Calculator");
Label l1 = new Label("Unesite prvi broj");
Label l2 = new Label("Unesite drugi broj");
Label l3 = new Label("Rezultat:");
Label l4 = new Label("Izbor operacije");

TextField t1 = new TextField();
TextField t2 = new TextField();
TextField t3 = new TextField();

naslov.setBounds(150, 50, 200, 20);
l1.setBounds(50, 100, 120, 25);
l2.setBounds(50, 140, 120, 25);
l3.setBounds(50, 240, 120, 25);
l4.setBounds(50, 180, 120, 25);

t1.setBounds(200, 100, 120, 20);
t2.setBounds(200, 140, 120, 20);
t3.setBounds(200, 240, 120, 30);

Choice mychoice = new Choice();
mychoice.add("+");
mychoice.add("-");
mychoice.add("*");
mychoice.add("/");

mychoice.setBounds(200, 180, 120, 20);

Button b1 = new Button("Izračunaj");

b1.setBounds(200, 208, 120, 25);

t1.setBackground(Color.white);
t2.setBackground(Color.white);
t3.setBackground(Color.pink);
f.setBackground(Color.yellow);

f.setLayout(null);

f.add(mychoice);
f.add(naslov);
f.add(l1);
f.add(l2);
f.add(l3);
f.add(l4);
f.add(t1);
f.add(t2);
f.add(t3);
f.add(b1);

b1.addActionListener(e -> {

int n1 = Integer.parseInt((t1.getText()));
int n2 = Integer.parseInt((t2.getText()));
String s = mychoice.getSelectedItem();

if (e.getSource() == mychoice && s.equals("+")) {
t3.setText(String.valueOf(n1 + n2));}

if (e.getSource() == mychoice && s.equals("-")){
t3.setText(String.valueOf(n1 - n2));}

if (e.getSource() == mychoice && s.equals("*")){
t3.setText(String.valueOf(n1 * n2));}

if (e.getSource() == mychoice && s.equals("/")){
t3.setText(String.valueOf(n1 / n2));}
});
}

}
Untitled.jpg
 
Evo i mene. Sve sam uradio kako ste rekli ali kod i dalje ne radi. Sada uopste ne radi ni jedna operacija. Molim Vas da detaljno neko pogleda svaku tacku-zarez, zagradu, itd..... Ja vise ne znam gde gresim. Kod trenutno izgleda ovako:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class Calculator {
public static void main(String[] args) {
Frame f = new Frame("Calculator");
f.setLayout(new FlowLayout());
f.setSize(400, 330);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Label naslov = new Label("Mini AWT Calculator");
Label l1 = new Label("Unesite prvi broj");
Label l2 = new Label("Unesite drugi broj");
Label l3 = new Label("Rezultat:");
Label l4 = new Label("Izbor operacije");

TextField t1 = new TextField();
TextField t2 = new TextField();
TextField t3 = new TextField();

naslov.setBounds(150, 50, 200, 20);
l1.setBounds(50, 100, 120, 25);
l2.setBounds(50, 140, 120, 25);
l3.setBounds(50, 240, 120, 25);
l4.setBounds(50, 180, 120, 25);

t1.setBounds(200, 100, 120, 20);
t2.setBounds(200, 140, 120, 20);
t3.setBounds(200, 240, 120, 30);

Choice mychoice = new Choice();
mychoice.add("+");
mychoice.add("-");
mychoice.add("*");
mychoice.add("/");

mychoice.setBounds(200, 180, 120, 20);

Button b1 = new Button("Izračunaj");

b1.setBounds(200, 208, 120, 25);

t1.setBackground(Color.white);
t2.setBackground(Color.white);
t3.setBackground(Color.pink);
f.setBackground(Color.yellow);

f.setLayout(null);

f.add(mychoice);
f.add(naslov);
f.add(l1);
f.add(l2);
f.add(l3);
f.add(l4);
f.add(t1);
f.add(t2);
f.add(t3);
f.add(b1);

b1.addActionListener(e -> {

int n1 = Integer.parseInt((t1.getText()));
int n2 = Integer.parseInt((t2.getText()));
String s = mychoice.getSelectedItem();

if (e.getSource() == mychoice && s.equals("+")) {
t3.setText(String.valueOf(n1 + n2));}

if (e.getSource() == mychoice && s.equals("-")){
t3.setText(String.valueOf(n1 - n2));}

if (e.getSource() == mychoice && s.equals("*")){
t3.setText(String.valueOf(n1 * n2));}

if (e.getSource() == mychoice && s.equals("/")){
t3.setText(String.valueOf(n1 / n2));}
});
}

}Pogledajte prilog 865710
E greska ono e.getSource nikad nece biti my choice, nego b1. Znaci samo if (s=="-")..., i to je to.
 
Kod:
if (s.equals("+")) {
       t3.setText(String.valueOf(n1 + n2));
}

if (s.equals("-")){
       t3.setText(String.valueOf(n1 - n2));
}

if (s.equals("*")){
       t3.setText(String.valueOf(n1 * n2));
}

if (s.equals("/")){
       t3.setText(String.valueOf(n1 / n2));
}
Znaci greska je u tome sto getSource vraca b1 a ne mychoice. Znaci moze provera e.getSource() == b1 umesto mychoice.
Dakle ono sto se slusa na event je b1.
 

Back
Top