• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

proste zadanie z JAVY - pomoc i sprawdzenie

VPS Starter Arubacloud
0 głosów
250 wizyt
pytanie zadane 14 listopada 2021 w Java przez grzecho123 Początkujący (450 p.)

Witam!

Jestem początkującym programistą i mam pytanie odnośnie zadania czy wszystko jest ok i czy ktoś mógłby mi sprawdzić zadanie odnośnie błędów.

Polecenie:

- Zdefiniuj klasę ułamek. Zaimplementuj metody dodawanie, odejmowania oraz skracania ułamka.

- Zdefiniuj klasę wyjątku o nazwie ZerowyMianownik (ZeroDenominator), a następnie użyj jej w konstruktorze. W przypadku podania w konstruktorze mianownika równego 0, należy rzucić wyjątkiem niekontrolowanym.

Mój kod:

Main.java

package com.company;

public class Main {

    public static void main(String[] args) {
        Fraction f1=new Fraction(1,20,1,5);
        f1.addFraction();
        f1.subtractFraction();
    }
}

Fraction.java

package com.company;

public class Fraction {

    int num, den, num1, den1;
    float wynik;
    public Fraction(int numerator, int denominator, int numerator1, int denominator1)
    {
        this.num=numerator;
        this.den=denominator;
        this.num1=numerator1;
        this.den1=denominator1;
        ZeroDenominator z2= new ZeroDenominator();
        z2.zero();
    }
    int gcd(int a, int b)
    {
        if (a == 0)
            return b;
        return gcd(b%a, a);
    }

    void lowest(int num, int den)
    {
        int common_factor = gcd(num,den);
        den = den/common_factor;
        num = num/common_factor;
        System.out.println(num+"/"+den);
    }

    void addFraction()
    {
        if(den!=den1)
        {
            int den3;
            den3 = den * den1 ;
            int num3 = (num * den1) + (num1 * den);
            lowest(num3,den3);
        }
        else
        {
                int num3=num+num1;
                lowest(num3,den);
        }

    }

    void subtractFraction()
    {
        if(den!=den1)
        {
            int den3;
            den3 = den * den1 ;
            int num3 = (num * den1) - (num1 * den);
            lowest(num3,den3);
        }
        else
        {
            int num3=num-num1;
            lowest(num3,den);
        }

    }

    public class ZeroDenominator {

        void zero()
        {
            try {
                float result;
                result=num/den;
                result=num1/den1;
            } catch(ArithmeticException e) {
                System.out.println("Nie dzielimy przez zero");
            }
        }
    }
}

Nie jestem pewien odnośnie tych wyjątków czy mam więcej ich zapisać czy ten jeden wystarczy?

1
komentarz 14 listopada 2021 przez Wiciorny Ekspert (269,120 p.)

- Zdefiniuj klasę wyjątku o nazwie ZerowyMianownik (ZeroDenominator), a następnie użyj jej w konstruktorze. W przypadku podania w konstruktorze mianownika równego 0, należy rzucić wyjątkiem niekontrolowanym.

to zadanie jest niepoprawne nie ma klasy wyjątku i nie jest on wyrzucany w momencie obsługi konstruktora.  

komentarz 14 listopada 2021 przez grzecho123 Początkujący (450 p.)
To ta klasa, którą napisałem nie jest klasą wyjątku w sensie czy chodzi o dopisanie "extends Exception" ? Czy o coś innego
1
komentarz 14 listopada 2021 przez Wiciorny Ekspert (269,120 p.)
edycja 14 listopada 2021 przez Wiciorny
masz stworzyć klasę która reprezentuje wyjątek, a nie "klasę" która wyrzuca wyjątek Arytmetyczny... bo tak to nie masz ani jednego ani drugiego, a wyrzucasz tylko to co na runtime.
Chodzi o rozszerzenie klasy RuntimeException

totalnie niepotrzebna jest metoda zero, w ogóle jest ona niepoprawna bo uzależniona od klasy zewnętrznej. A klasa zewnętrzna może nie istnieć jeszcze i mozemy utworzyc obiekt tylko klasy wewnetrznej
komentarz 15 listopada 2021 przez grzecho123 Początkujący (450 p.)

Czyli mam rozumieć, że jeśli klasa reprezentuje wyjątek to dziedziczy z tej klasy czyli w tym wypadku RuntimeException?

Zamiast metody zero umieściłem blok try i catch w konstruktorze tej klasy. Nie wiem czy to jest dobrze?

Nie wiem czy czy zamiast ArithmeticException  w tym catch można dać po prostu Exception?

To mój trochę zmieniony kod:

public class ZeroDenominator extends RuntimeException{

        ZeroDenominator() {
            try {
                float result;
                result = num / den;
                result = num1 / den1;
            } catch (ArithmeticException e) {
                System.out.println("Nie dzielimy przez zero");
            }
        }
    }

 

1
komentarz 15 listopada 2021 przez Wiciorny Ekspert (269,120 p.)
 ZeroDenominator() {
            try {
                float result;
                result = num / den;
                result = num1 / den1;
            } catch (ArithmeticException e) {
                System.out.println("Nie dzielimy przez zero");
            }
        }

w jakim celu to robisz? skoro twoim zadaniem jest tylko zwrócić wyjątek jeśli dzielnikiem bedzie 0 nic więcej, to jest niepotrzebne 

1
komentarz 15 listopada 2021 przez grzecho123 Początkujący (450 p.)
dostaje błąd w kompilatorze: java: illegal start of type

Dlatego daje to w funkcji albo w konstruktorze bo bez tego mam błąd
2
komentarz 15 listopada 2021 przez Oscar Nałogowiec (29,290 p.)

@grzecho123, dlaczego masz dwa ułamki w jednym obiekcie?

komentarz 15 listopada 2021 przez grzecho123 Początkujący (450 p.)
W sumie racja mógłbym zrobić jeden ułamek w obiekcie, a później po prostu dodawać lub odejmować obiekty.

1 odpowiedź

+1 głos
odpowiedź 15 listopada 2021 przez Wiciorny Ekspert (269,120 p.)
wybrane 15 listopada 2021 przez grzecho123
 
Najlepsza

Postanowiłem Ci to napisac, bo nie rozumiesz zadania i robisz niepotrzebne rzeczy 

class DividingByZeroException extends  RuntimeException{
    public DividingByZeroException(String message) {
        super(message);
    }
}

to jest klasa błędu

a teraz masz wyrzucić błąd gdy mianownik jest 0. 

  public Fraction(int numerator, int denominator, int numerator1, int denominator1)
    {
        if(denominator == 0 ){
            throw  new DividingByZeroException("Mianownik nie może być 0");
           }
        this.num=numerator;
        this.den=denominator;
        this.num1=numerator1;
        this.den1=denominator1;
    
    }


 

1
komentarz 15 listopada 2021 przez grzecho123 Początkujący (450 p.)
Okej dziękuję za pomoc

Podobne pytania

0 głosów
1 odpowiedź 219 wizyt
pytanie zadane 21 sierpnia 2018 w Java przez Moti Użytkownik (650 p.)
0 głosów
0 odpowiedzi 247 wizyt
pytanie zadane 13 grudnia 2021 w Java przez grzecho123 Początkujący (450 p.)
0 głosów
1 odpowiedź 325 wizyt
pytanie zadane 17 września 2018 w Java przez juz_nie_mlody Początkujący (470 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...