Diskuze: Proč mi to nejede?

Java Java Proč mi to nejede?

Avatar
Danik
Člen
Avatar
Danik:

Mám takový to kód, mělo by jít o kalkulačku. Jenže při zadání druhého čísla se kód ukončí, respektive napíše se věta:"Zadejte kód operace.." a tím to končí. Neví někdo kde je chyba? Děkuji.

package kalkulacka;

import java.util.Scanner;

public class Kalkulacka {

        public static void main(String[] args) {

                Scanner in = new Scanner(System.in);

                System.out.println("Zadejte první  celé číslo: ");
                int prvni = in.nextInt();
                System.out.println("Zadejte druhé celé číslo: ");
                int druhe = in.nextInt();

                System.out.println("Zadejte znak operace: \nsčítání: +\nodčítání: -\nnásobení: *\ndělení: /");
                String operace = in.nextLine();


                if (operace == "+") {
                        System.out.println("Součet je: " + scitej(prvni, druhe));
                }

                else if (operace == "-") {
                        System.out.println("Rozdíl je: " + odecitej(prvni, druhe));
                }

                else if (operace == "*") {
                        System.out.println("Součin je: " + nasob(prvni, druhe));
                }

                else if (operace == "/") {
                        System.out.println("Podíl je: " + del(prvni, druhe));
                }
                in.close();
        }

        public static int scitej(int cislo1, int cislo2) {
                int soucet = cislo1 + cislo2;
                return soucet;
        }

        public static int odecitej(int cislo1, int cislo2) {
                int rozdil = cislo1 - cislo2;
                return rozdil;
        }

        public static int nasob(int cislo1, int cislo2) {
                int soucin = cislo1 * cislo2;
                return soucin;
        }

        public static int del(int cislo1, int cislo2) {
                int podil = cislo1 / cislo2;
                return podil;
        }



}
 
Odpovědět 15.5.2014 19:26
Avatar
Dominio
Člen
Avatar
Dominio:

Pro načítání stringu použij metodu next() třídy Scanner. Nejsem si přesně jist, čím to je, ale metoda nextLine() nefunguje tak, jak si mnozí představují.
Tedy:

String operace = in.next();
 
Nahoru Odpovědět 15.5.2014 19:35
Avatar
Dominio
Člen
Avatar
Odpovídá na Dominio
Dominio:

Jej, teď jsem si toho všiml. String je objekt, tudíš ho musíš porovnávat pomocí equals, nikoliv ==. Tvé podmínky by měli být:

if (operace.equals("+"))

Nicméně to, co jsem napsal je pravda. Pokuď ti to funguje, můžeš to tak nechat, ale v cyklu to může dělat problémy.

 
Nahoru Odpovědět  +1 15.5.2014 19:38
Avatar
Danik
Člen
Avatar
Odpovídá na Dominio
Danik:

Díky.:) Opravil jsem to podle tvých rad a funguje bez problému.

 
Nahoru Odpovědět 15.5.2014 19:41
Avatar
xxxvodnikxxx
Člen
Avatar
xxxvodnikxxx:

Jinak ty operace můžeš mít ve switchi, nepotřebuješ X else-ifů :)

switch(operace){
case '+':
//...
break;
// etc..

}

EDIT:
Nejsem si jistej, jestli java umí narvat i string do case (ale myslim že jo :D )
Jinak by jsi to mohl řešit ještě pomocí enumu, ale to ti kód moc neušetří, spíše nabyde :D

To by v jave mělo jít taky :)

// EDIT 2:
podle všeho jde i string
http://www.journaldev.com/…va-7-feature

Editováno 15.5.2014 20:33
Nahoru Odpovědět  +1 15.5.2014 20:30
Unix- svět, kde chcete být nulou :) (UID)
Avatar
xxxvodnikxxx
Člen
Avatar
xxxvodnikxxx:

Ale nevim, pokud by to operace byl char, tak by mělo bejt v case 'znak', pokud je to string, tak asi "string" (jiný uvozující znaky)

Editováno 15.5.2014 20:35
Nahoru Odpovědět 15.5.2014 20:34
Unix- svět, kde chcete být nulou :) (UID)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.