Tässä on mun koodi: siinä on sellainen vika, että kertolaskun vastaus on aina 0.0 ja jakolaskusta tulee NaN
/** Tämä on laskin, jolla voi suorittaa neljää erityyppistä laskutoimitusta: ** kerto-, jako-, miinus- ja plus-laskuja */ public class Laskin { public static void plussa() { System.out.println("Plus-laskenta 0 lopettaa\n========================="); int i = 0; double summa = 0; while ( i == 0 ) { double luku = Lue.dluku(); summa += luku; if (luku == 0) { System.out.println("Lopetit plussaamisen"); i = 1; break; } } System.out.println("Lukujen summa on: "+summa); } public static void miinus() { System.out.println("Miinus-laskenta 0 lopettaa\n==========================="); int i = 0; double alkuluku = Lue.dluku(); double erotus = 0; while ( i == 0 ) { double luku = Lue.dluku(); erotus = alkuluku -= luku; if (luku == 0 || alkuluku == 0) { System.out.println("Lopetit miinustamisen"); i = 1; break; } } System.out.println("Lukujen erotus on: "+erotus); } public static void jako() { System.out.println("Jako-laskenta 0 lopettaa\n========================="); int i = 0; double alkuluku = Lue.dluku(); double osamaara = 0; while ( i == 0 ) { double luku = Lue.dluku(); osamaara = alkuluku / luku; if (luku == 0 || alkuluku == 0) { System.out.println("Lopetit Jakamisen"); i = 1; break; } } System.out.println("Lukujen osamäärä on: "+osamaara); } public static void kerto() { System.out.println("Kerto-laskenta 0 lopettaa\n=========================="); int i = 0; double alkuluku = Lue.dluku(); double tulo = 0; while ( i == 0 ) { double luku = Lue.dluku(); tulo = alkuluku * luku; if (luku == 0 || alkuluku == 0) { System.out.println("Lopetit Kertomisen"); i = 1; break; } } System.out.println("Lukujen tulo on: "+tulo); } public static void main(String[] args) { int komento; do { System.out.println("\nLaskin 9 lopettaa\n==================\n\n0 - Plus-laskenta\n\n1 - Miinus-laskenta\n\n2 - jakolasku\n\n3 - Kertolaskenta\n"); komento = Lue.kluku(); switch (komento) { case 0: plussa(); break; case 1: miinus(); break; case 2: jako(); break; case 3: kerto(); break; case 9: System.out.println("Lopetit laskimen"); break; default: System.out.println("Virhe syötteessä"); break; } } while (komento != 9); } }
while ( i == 0 ) { double luku = Lue.dluku(); tulo = alkuluku * luku; if (luku == 0 || alkuluku == 0) {
Siis tässähän tämä kertomisen vika on. Tämä kertoo luvun ensin ja SITTEN tarkistaa oliko se loppumerkki. Kun siis lopetat kertomisen kerrot siihen asti saadun luvulla nolla minkä tulos on aina nolla. Tee sensijaan näin esimerkiksi.
while (i==0) { double luku = Lue.dluku(); if (luku == 0 || alkuluku == 0) { System.out.println("Lopetit Kertomisen"); i = 1; break; } else { tulo = alkuluku * luku; } }
Sama vija jakolaskussa. Yrität jakaa lukua nollalla mikä on mahdotonta eli korjaa samalla tavalla.
Lisäksi ellen ole aivan väärässä sinulla on tuossa logiikkavirhe. Oletetaanpa että kertolaskussa käyttäjä syöttää arvot 4(alkuluku), 5, 6, 8. Tuloksena olisi:
Tulo(4*5)=20
Seuraavaksi tulo olisi:
Tulo(4*6)=24
Sitten 4*8=32
Eli väliaika tulosta ei tallenneta minnekkään. Oikein olisi sijoittaa alkuluku tuloon ennen looppia ja loop laittaa muotoon
tulo=tulo*luku;
Mikäli siis tulkitsin mitä halusit saada aikaan. Sama juttu erotukseen ja jakoon. Plussa oli oikein.
kiitos paljon, sain toimimaan.. :D
lisään vielä potenssin ja ehkä neliöjuuren, mutta neliöjuuri on aika turha, koska se on luku potenssiin 0.5..
Aihe on jo aika vanha, joten et voi enää vastata siihen.