komunikat ""nie dziel przez zero" w kalkulatorze (aplet)

0

Witam zrobiłem prosty kalkulator, ale chciałbym aby przy dzieleniu przez zero nie wyskakiwał mi błąd tylko komunikat "nie dziel przez zero ! " proszę o pomoc

package javaapplication4;

import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;


public class kalk extends Applet implements ItemListener,ActionListener  {

   Label l1,l2,l3;
   Panel p1,p2,p3;
   TextField pt,pt2,pt3;
   Button b1,b2,b3,b4;
   
    @Override
    public void init() {

        l1 = new Label("liczba1 ");
        l2 = new Label("liczba2 ");
        l3 = new Label("wynik ");
      
        b1 = new  Button("+");
        b1.addActionListener(this);

        b2 = new  Button("-");
        b2.addActionListener(this);

        b3 = new  Button("*");
        b3.addActionListener(this);

        b4 = new  Button("/");
        b4.addActionListener(this);

        pt=new TextField(12);
        pt2=new TextField(12);
        pt3=new TextField(15);

        p1= new Panel();
        p2= new Panel();
        p3= new Panel();

        p1.add(l1);  
        p1.add(pt);
        p1.add(l2);
        p1.add(pt2);

        p2.add(b1);
        p2.add(b2);
        p2.add(b3);
        p2.add(b4);

        p3.add(l3);
        p3.add(pt3);

        add(p1);  add(p2); add(p3);

         }

    @Override
    public void itemStateChanged(ItemEvent e) {

        }

    @Override
    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == b1) //jesli nacisne ten przycisk
	{
	int sum = Integer.parseInt(pt.getText()) + Integer.parseInt(pt2.getText());
	//funkcja dodawania
	pt3.setText(String.valueOf(sum)); //przypisanie wyniku do klasy wynik
	}

        if(e.getSource() == b2) //jesli nacisne ten przycisk
	{
	int min = Integer.parseInt(pt.getText()) - Integer.parseInt(pt2.getText());
	//funkcja dodawania
	pt3.setText(String.valueOf(min)); //przypisanie wyniku do klasy wynik
	}

        if(e.getSource() == b3) //jesli nacisne ten przycisk
	{
	int mnoz = Integer.parseInt(pt.getText()) * Integer.parseInt(pt2.getText());
	//funkcja dodawania
	pt3.setText(String.valueOf(mnoz)); //przypisanie wyniku do klasy wynik
	}

        if(e.getSource() == b4) //jesli nacisne ten przycisk
	{
	int dziel = Integer.parseInt(pt.getText()) / Integer.parseInt(pt2.getText());
	//funkcja dzielenia

       pt3.setText(String.valueOf(dziel)); //przypisanie wyniku do klasy wynik
	}

    }
}
0

Opcja 1)

  1. Sprawdzasz czy dzielnik==0
    a) tak - robisz messegeBoxa z komunikatem ze nie wolno dzielic przez 0
    b) dzielsiz

Opcja 2)
1)dzielsz w try, catch
2)Jezeli leci wyjatek robisz messageBox z komunikatem

0

Dodatkowe uwagi:

  1. Powinieneś sie zabezpieczyc przed błędną postacią liczby:
int pierwsza = 0;
int druga = 0;
try
{
    pierwsza = Integer.parseInt(pt.getText());
    druga = Integer.parseInt(pt2.getText());
}
catch(NumberFormatException e)
{
    //komunikat o błędzie
    return;
}
  1. Jesteś pewien, że chcesz by 7/5 było równe 1? Jesli nie, to
double dziel = ((double)Integer.parseInt(pt.getText())) / Integer.parseInt(pt2.getText());
0

Ale funkcje try wstawiam przed pętlą if (dotyczącą dzielenia) tak?

0
int pierwsza = 0;
int druga = 0;
try
{
    pierwsza = Integer.parseInt(pt.getText());
    druga = Integer.parseInt(pt2.getText());
    Twoja funkcja dzieląca

}
catch(NumberFormatException e)
{
    //komunikat o błędzie
    return;
}
0

Czy tak ?

 if(e.getSource() == b4) //jesli nacisne ten przycisk
	{
int pierwsza = 0;
int druga = 0;
try
{
    pierwsza = Integer.parseInt(pt.getText());
    druga = Integer.parseInt(pt2.getText());
   
    int dziel = Integer.parseInt(pt.getText()) / Integer.parseInt(pt2.getText());
    pt3.setText(String.valueOf(dziel)); //przypisanie wyniku do klasy wynik
}
catch(NumberFormatException e)
{
  //komunikat bledu
    return;
}
0

bo jezeli tak to zostaje jeszcze mi jak napisać ten komunikat błędu :) , no nie wiem bo sie uczę dopiero tej javy , a więc czy komunikat błędu ma taką postać ???:

 pt2.setText(...);
           JOptionPane.showMessageDialog(... ,"nie dziel przez zero ");
    return;
0

Niewłaściwa postac liczby dotyczy wszystkich działań.

    public void actionPerformed(ActionEvent e) {
        int pierwsza = 0;
        int druga = 0;
        int wynik = 0;
        try
        {
            pierwsza = Integer.parseInt(pt.getText());
            druga = Integer.parseInt(pt2.getText());
        }
        catch(NumberFormatException e)
        {
            JOptionPane.showMessageDialog(this,"To nie sa liczby typu int");
            return;
        } 
        if(e.getSource() == b1) //jesli nacisne ten przycisk
        {
        wynik = pierwsza + druga;
        //funkcja dodawania
        }
 
        if(e.getSource() == b2) //jesli nacisne ten przycisk
        {
        wynik = pierwsza - druga;
        //funkcja dodawania
        }
 
        if(e.getSource() == b3) //jesli nacisne ten przycisk
        {
        wynik = pierwsza * druga;
        //funkcja dodawania
        }
 
        if(e.getSource() == b4) //jesli nacisne ten przycisk
        {
        if(druga == 0)
        {
            JOptionPane.showMessageDialog(this,"Nie umiem dzielić przez zero");            
            return;
        }
        wynik = pierwsza / druga;
        //funkcja dzielenia
        }
        pt3.setText(wynik+"");
}
0

Dziękuję już to ogarniam, wszystko pięknie chodzi , i ostatnia sprawa , jak zrobić aby przy dzieleniu np: 5/2 nie pokazywało 2 tylko 2.5 ???

0

Używasz zmiennych całkowitych, to i wynik całkowity dostajesz.

0

ale gdy zamiast int pisze double to mi nic nie zmienia

0
hiob_22 napisał(a):

ale gdy zamiast int pisze double to mi nic nie zmienia

Liczby, które dzielisz muszą być typu double i zmienna, w której zapisujesz wynik też
double pierwsza;
double druga;
double wynik;

0

Przecież napisałem kod w pierwszym poście.

1 użytkowników online, w tym zalogowanych: 0, gości: 1