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?
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); }
Lisäksi vaikkapa yhteenlasku ja kertolasku voi vuotaa yli eikä nollalla voi jakaa.
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.
Jos käyttäjä haluaa laskea lausekkeen 1 + 0, niin ohjelmasi taitaa kaatua divided by zero poikkeukseen.
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.
Jostain syystä toimiiXD...Unohdin kokonaan kiittää avusta eli kiitos taas. Ilman näitä neuvoja jumittaisin todennäköisesti edelleen muutamien tehtävien kohdalla.
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).
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.