Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Syötetyn laskutoimituksen laskeminen

Sivun loppuun

kukkakaali [01.11.2017 12:13:47]

#

import java.util.Scanner;

public class Laskin {

    public static void main(String[] args) {
        Scanner lukija = new Scanner(System.in);

        System.out.println("Anna ensimmäinen luku: ");
        int luku1 = Integer.parseInt(lukija.nextLine());

        System.out.println("Anna toinen luku: ");
        int luku2 = Integer.parseInt(lukija.nextLine());

        System.out.println("Anna operaatio: ");
        String operaatio = lukija.nextLine();

        int tulos = luku1+luku2;
        int tulos2 = luku1-luku2;
        int tulos3 = luku1*luku2;
        int tulos4 = luku1/luku2;

        if (operaatio == +){
        System.out.println(+luku1+" + "+luku2+ " = " +tulos+);

        }else if (operaatio == -){
            System.out.println(+luku1+" - "+luku2+ " = " + tulos2+);

        }else if (operaatio == *){
            System.out.println(+luku1+ " * " +luku2+ " = " + tulos3);

        }else if (operaatio ==/){
            System.out.println(+luku1+ " / " +luku2+ " = " + tulos4);
        }

    }
}

Voiskohan joku kertoa onko tossa mun koodissa mitään järkeä. Voiko toi toimia? Näillä netti kursseilla on niin hankalaa saada apua.Vertailu operaattorissa "(operaatio == -) jne. on ainakin joku virhe kun netbeans ilmottaa että illegal start of expression. Voiskohan sen saada toimimaan jotenkin?

kalppi [01.11.2017 12:47:12]

#

https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java

groovyb [01.11.2017 13:52:30]

#

Myös tuloksesi saattaa olla jotain muuta kuin pitää. Muunna luku1 ja luku2 numeroksi ennen laskutoimituksia. Jos lasket yhteen "12" + "14", on tulos "1214", eikä 26.

int summa = Integer.parseInt(luku1) + Integer.parseInt(luku2);
int erotus = Integer.parseInt(luku1) - Integer.parseInt(luku2);
int kertolasku = Integer.parseInt(luku1) * Integer.parseInt(luku2);
//Huomioithan että integer ei tue desimaaleja, joten arvo ei ole oikea jakolaskun tulo
int jakolasku = Integer.parseInt(luku1) / Integer.parseInt(luku2);

et voi myöskään verrata annettua merkkijonoa (operaattori) javan operaattoriin (+, - jne), vaan sinun tulee verrata annettua operaattoria vastaavaan merkkiin

String operaatio = lukija.nextLine();
if (operaatio == "+"){
        int summa = Integer.parseInt(luku1) + Integer.parseInt(luku2);
        System.out.println(luku1 + " + " + luku2 + " = " + summa);
}

Jaska [01.11.2017 14:05:08]

#

Lisäksi vaikkapa yhteenlasku ja kertolasku voi vuotaa yli eikä nollalla voi jakaa.

kukkakaali [01.11.2017 14:20:56]

#

import java.util.Objects;
import java.util.Scanner;

public class Laskin {

    public static void main(String[] args) {
        Scanner lukija = new Scanner(System.in);

        System.out.println("Anna ensimmäinen luku: ");
        int luku1 = Integer.parseInt(lukija.nextLine());

        System.out.println("Anna toinen luku: ");
        int luku2 = Integer.parseInt(lukija.nextLine());

        System.out.println("Anna operaatio: ");
        String operaatio = lukija.nextLine();

        double tulos = 1.0*luku1+luku2;
        double tulos2= 1.0*luku1-luku2;
        double tulos3 = 1.0*luku1*luku2;
        double tulos4 = 1.0* luku1/luku2;

        if (operaatio.equals("+")){
            System.out.println(+luku1+ " + " +luku2+ " = " +tulos);

        }else if (operaatio.equals("-")){
            System.out.println(+luku1+ " - " + luku2 + " = " + tulos2);

        }else if (operaatio.equals("*")){
            System.out.println(+luku1+ " * " +luku2+ " = " + tulos3);

        }else if (operaatio.equals("/")){
            System.out.println(+luku1+ " / " +luku2+ " = " + tulos4);
        }

    }
}

Tällanen siitä nyt tuli. Kapsahdin vanhaan ansaan eli equals piti lisätä ja muuttaa vähän muitakin kohtia. Nyt ainakin tuli vahvistus koulun servulta että läpi meni.

Teuro [02.11.2017 12:21:48]

#

Jos käyttäjä haluaa laskea lausekkeen 1 + 0, niin ohjelmasi taitaa kaatua divided by zero poikkeukseen.

Grez [02.11.2017 13:41:13]

#

Periaatteessa on mahdollista, että debug tilassa kaatuu ja release tilassa ei. Olettaen siis että release tilassa kääntäjä tajuaa että kolmea tulosmuuttujista ei tarvita.

kukkakaali [02.11.2017 13:56:19]

#

Jostain syystä toimiiXD...Unohdin kokonaan kiittää avusta eli kiitos taas. Ilman näitä neuvoja jumittaisin todennäköisesti edelleen muutamien tehtävien kohdalla.

Metabolix [02.11.2017 16:54:46]

#

Teuro kirjoitti:

Jos käyttäjä haluaa laskea lausekkeen 1 + 0, niin ohjelmasi taitaa kaatua divided by zero poikkeukseen.

Liukuluvuilla (joiksi lasku muuttuu 1.0*:n takia) nollalla jakaminen tuottaa äärettömän ja 0/0.0 tuottaa arvon NaN (not a number).

kukkakaali [02.11.2017 18:53:13]

#

Ai niin täytyy vielä antaa propsit groovyb:lle. Toi sun ehdotus on varmaan tai onkin toimiva mutten ehtinyt lukea viestiäsi kun kirjoittelin niin tohkeissani tota koodin pätkääXD.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta