Sčítačka, rada, kontrola – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Sčítačka, rada, kontrola – Java – Fórum – Programujte.comSčítačka, rada, kontrola – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Zemi440
Duch
25. 4. 2016   #1
-
0
-

Dobrý den,

mohl bych poprosit, koukl by se mi někdo na kód, který sem vytvořil a řekl zda je to správně nebo co mi tam chybí, co bych měl dodělat, popřípadě mi poradit jak na to? Děkuji. Přeji hezký den. 

Zadání: 

Ve třídě Scitacka v projektu scitacka_velkych_cisel implementujte veřejnou statickou metodu, která bude vracet hodnotu výrazu 1 + 1 + 1 +.......+ 1 + 1 + 1. Počet jedniček, které se mají sečíst bude dán parametrem metody, který bude typu BigInteger. Výpočet hodnoty výrazu se provede s využitím instance typu Scitackapostupným sčítáním. Navrhněte testovací metodu pro ověření správnosti implementované metody.

package scitacka;

import java.math.BigInteger;

/**
 * Trida Scitacka predstavuje model scitacky, ktera pouze umi secist dve cela
 * cisla typu BigInteger. Kazda instance teto tridy uchovava dve cela cisla typu
 * BigInteger, ktera se daji menit a je mozne kdykoliv urcit jejich soucet
 * pomoci metody soucet().
 *
 * @version 15.2.2016
 */
public class Scitacka {

    // instancni promenne, ktere uchovavaji dve cisla, ktera se budou scitat
    private BigInteger cislo1;
    private BigInteger cislo2;

    /**
     * Konstruktor pro objekty tridy Scitacka, ktery nastavi hodnoty obou
     * scitanych cisel na hodnoty dane parametry cislo1 a cislo2.
     *
     * @param cislo1 levy scitanec
     * @param cislo2 pravy scitanec
     */
    public Scitacka(BigInteger cislo1, BigInteger cislo2) {
        this.cislo1 = cislo1;
        this.cislo2 = cislo2;
    }

    /**
     * Konstruktor pro objekty tridy Scitacka, ktery nastavi hodnoty obou
     * scitanych cisel na nulu.
     */
    public Scitacka() {
        cislo1 = BigInteger.ZERO;
        cislo2 = BigInteger.ZERO;
        //this(BigInteger.ZERO, BigInteger.ZERO);
    }

    /**
     * Konstruktor pro objekty tridy Scitacka, ktery nastavi hodnoty obou
     * scitanych cisel na hodnotu danou parametrem cislo.
     *
     * @param cislo spolecna hodnota obou scitancu
     */
    public Scitacka(BigInteger cislo) {
        this.cislo1 = cislo;
        this.cislo2 = cislo;
        //this(cislo, cislo);
    }

    /**
     * Vraci hodnotu leveho scitance.
     *
     * @return Metoda vraci hodnotu scitance cislo1 z vyrazu cislo1 + cislo2,
     * ktery se da vyhodnotit pomoci metody soucet().
     */
    public BigInteger getCislo1() {
        return cislo1;
    }

    /**
     * Vraci hodnotu praveho scitance.
     *
     * @return Metoda vraci hodnotu scitance cislo2 z vyrazu cislo1 + cislo2,
     * ktery se da vyhodnotit pomoci metody soucet().
     */
    public BigInteger getCislo2() {
        return cislo2;
    }

    /**
     * Metoda nastavi hodnotu leveho scitance pomoci parametru cislo1.
     *
     * @param cislo1 hodnota typu BigInteger, ktera se pouzije k nastaveni
     * leveho scitance
     */
    public void setCislo1(BigInteger cislo1) {
        this.cislo1 = cislo1;
    }
    
    /**
     * Metoda nastavi hodnotu leveho scitance pomoci parametru cislo1.
     *
     * @param cislo1 hodnota typu BigInteger, ktera se pouzije k nastaveni
     * leveho scitance
     * @param cislo2 hodnota typu BigInteger, ktera se pouzije k nastaveni
     * praveho scitance
     */
    public void setCislo1ACislo2(BigInteger cislo1, BigInteger cislo2) {
        this.cislo1 = cislo1;
        this.cislo2 = cislo2;
//        setCislo1(cislo1);
//        setCislo2(cislo2);
    }

    /**
     * Metoda nastavi hodnotu praveho scitance pomoci parametru cislo2.
     *
     * @param cislo2 hodnota typu BigInteger, ktera se pouzije k nastaveni
     * praveho scitance
     */
    public void setCislo2(BigInteger cislo2) {
        this.cislo2 = cislo2;
    }

    /**
     * Vraci soucet dvou cisel typu BigInteger, ktera jsou ulozena v instanci.
     *
     * @return Vraci hodnotu typu BigInteger, ktera predstavuje soucet obou
     * cisel ulozenych v instanci.
     */
    public BigInteger soucet() {
        return cislo1.add(cislo2);
    }

    /**
     * Vraci znakovou reprezentaci instance, ktera popisuje jeji stav.
     *
     * @return Vraci objekt typu String, ktery obsahuje hodnoty obou scitanych
     * cisel. Priklad: "Scitacka{cislo1 = 23, cislo2 = 123}".
     */
    @Override
    public String toString() {
        return "Scitacka{" + "cislo1=" + cislo1 + ", cislo2=" + cislo2 + '}';
    }

    /**
     * Testovaci metoda, ktera vytvori novou scitacku, kterou inicializuje
     * pomoci parametru levyScitanec a pravyScitenec. Potom vytiskne oba
     * scitance a jejich soucet.
     *
     * @param levyScitanec levy scitanec
     * @param pravyScitanec pravy scitanec
     */
    public static void testScitacka(BigInteger levyScitanec, BigInteger pravyScitanec) {
        Scitacka scitacka = new Scitacka(levyScitanec, pravyScitanec);
        System.out.println(scitacka);
        BigInteger cislo1 = scitacka.getCislo1();
        BigInteger cislo2 = scitacka.getCislo2();
        BigInteger soucet = scitacka.soucet();
        System.out.println("součet čísel " + cislo1 + " a " + cislo2 + " = " + soucet);
        System.out.println();
    }

    /**
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        testScitacka(BigInteger.ZERO, BigInteger.ZERO);

        testScitacka(new BigInteger("5"), new BigInteger("5"));

        testScitacka(new BigInteger("5"), new BigInteger("10"));

        testScitacka(new BigInteger("111111111111111111"), new BigInteger("222222222222222222222222"));

        testScitacka(new BigInteger("" + Integer.MAX_VALUE), BigInteger.ONE);

        testScitacka(new BigInteger("" + Integer.MAX_VALUE), new BigInteger("" + Integer.MAX_VALUE));
        
        testScitacka(new BigInteger("" + Integer.MIN_VALUE), new BigInteger("" + Integer.MIN_VALUE));
    }

}
Nahlásit jako SPAM
IP: 188.120.199.–
Kit+15
Guru
25. 4. 2016   #2
-
0
-

#1 Zemi44
V zadání nejsou požadovány gettery ani settery. Proto by ve třídě neměly být.

Řádky zdrojáku je dobré zalomit tak, aby se vešly na obrazovku. Nesnáším horizontální scrollování.

V metodě testScitacka() je zbytečně duplikována metoda toString(). Dá se zkrátit: 

public static void testScitacka(BigInteger levyScitanec, BigInteger pravyScitanec) {
    Scitacka scitacka = new Scitacka(levyScitanec, pravyScitanec);
    System.out.println(scitacka);
    System.out.println("Soucet = " + scitacka.soucet());
    System.out.println();}
Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
25. 4. 2016   #3
-
0
-

#1 Zemi44
Koukám na to zadání znovu: Nemáš sečítat dvě čísla, ale daný počet jedniček. Řešil jsi tedy úplně něco jiného. Máš sečítat pivní čárky v hospodě.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zemi440
Duch
25. 4. 2016   #4
-
0
-

Díky Kite, první příspěvek jsem pochopil, ale ten druhý nechápu co mi tím chceš říct? Nebo co bych měl změnit? 

Nahlásit jako SPAM
IP: 188.120.199.–
Kit+15
Guru
25. 4. 2016   #5
-
0
-

#4 Zemi44

... veřejnou statickou metodu, která bude vracet hodnotu výrazu 1 + 1 + 1 +.......+ 1 + 1 + 1. Počet jedniček, které se mají sečíst bude dán parametrem metody, ...

Nejspíš to znamená, že bys měl v cyklu přičítat jedničky. Asi takhle: 

public static BigInteger soucet(BigInteger n) {
    BigInteger scitacka = new Scitacka("0");
    for (BigInteger i = 0; i < n; i++) {
        scitacka.add("1");
    }
    return scitacka.vysledek();
}

Ještě by se mělo doladit porovnávání a inkrementace v BigInteger.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zemi440
Duch
27. 4. 2016   #6
-
0
-

Děkuji Kite za radu. 

Nahlásit jako SPAM
IP: 188.120.199.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 49 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý