Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Taoharcos
    aktív tag

    Hogy lehetne megoldani, hogy if-else szerkezeten belül a megfelelő return hajtódjon végre?
    (A feladat szerint a String szam telefonszám bekérése után a megfelelő osztályba kerülünk, ahol további számítások vannak, de azt már megírtam.)

    private static PhoneNumber PhoneNumber;  //gyanítom erre is szükség lesz

    public static PhoneNumber create(String szam) {
            String regex = "\\d+";
            String firstLetter = String.valueOf(szam.charAt(0));
            if (szam.matches(regex) == false) {
                System.out.println("nem jó");
                System.exit(0);
            } else if (szam.matches(regex) == true) {
                System.out.println("tartalmazza");
                if (firstLetter == "1") {
                    PhoneNumber =  new KwakPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "8") {
                    PhoneNumber = new IkiPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "9") {
                    PhoneNumber = new McChipPhoneNumber();
                    return PhoneNumber;
                }
            }
              return PhoneNumber; //ez itt a fő kérdés, hogyan adjam vissza a megfelelő returnt
            }

    Ami statikus azért miért kell példányosítani?

  • sztanozs
    veterán

    Hogy lehetne megoldani, hogy if-else szerkezeten belül a megfelelő return hajtódjon végre?
    (A feladat szerint a String szam telefonszám bekérése után a megfelelő osztályba kerülünk, ahol további számítások vannak, de azt már megírtam.)

    private static PhoneNumber PhoneNumber;  //gyanítom erre is szükség lesz

    public static PhoneNumber create(String szam) {
            String regex = "\\d+";
            String firstLetter = String.valueOf(szam.charAt(0));
            if (szam.matches(regex) == false) {
                System.out.println("nem jó");
                System.exit(0);
            } else if (szam.matches(regex) == true) {
                System.out.println("tartalmazza");
                if (firstLetter == "1") {
                    PhoneNumber =  new KwakPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "8") {
                    PhoneNumber = new IkiPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "9") {
                    PhoneNumber = new McChipPhoneNumber();
                    return PhoneNumber;
                }
            }
              return PhoneNumber; //ez itt a fő kérdés, hogyan adjam vissza a megfelelő returnt
            }

    Ugyanaz a változónév mint az osztály neve? Nem sivít emiatt a fordító? Btw, ha nem megfelelő a formátum, akkor én simán dobnék egy exception-t.

  • axioma
    veterán

    Hogy lehetne megoldani, hogy if-else szerkezeten belül a megfelelő return hajtódjon végre?
    (A feladat szerint a String szam telefonszám bekérése után a megfelelő osztályba kerülünk, ahol további számítások vannak, de azt már megírtam.)

    private static PhoneNumber PhoneNumber;  //gyanítom erre is szükség lesz

    public static PhoneNumber create(String szam) {
            String regex = "\\d+";
            String firstLetter = String.valueOf(szam.charAt(0));
            if (szam.matches(regex) == false) {
                System.out.println("nem jó");
                System.exit(0);
            } else if (szam.matches(regex) == true) {
                System.out.println("tartalmazza");
                if (firstLetter == "1") {
                    PhoneNumber =  new KwakPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "8") {
                    PhoneNumber = new IkiPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "9") {
                    PhoneNumber = new McChipPhoneNumber();
                    return PhoneNumber;
                }
            }
              return PhoneNumber; //ez itt a fő kérdés, hogyan adjam vissza a megfelelő returnt
            }

    Egyreszt tipikus switch-case pelda az else if-ek helyett, ha mar tanultatok.
    Masreszt gyanus, hogy az altipusok konstruktorai nem kapjak meg a szam nevu stringet.
    Harmadreszt lehet egybol return new KwakPhoneNumber(szam);alakban. Vagy ha mar mindenkepp valtozoba is teszed (bar ez a jelen reszlet nem indokolja), akkor nem kell az adott agon vissza is adni, eleg az ahova odakommentelted... ami jelenleg nonreachable, az IDE nem jelzi neked? ja nem, akkor az jo, ha az az altalanos eset, de ott is kene akkor egy konstruktorhivas es a parameter megadasa.

    [Amugy az altipusok azok leszarmazottjai rendesen a PhoneNumbernek? Mert anelkul nem fog menni.]

  • Szmeby
    tag

    Hogy lehetne megoldani, hogy if-else szerkezeten belül a megfelelő return hajtódjon végre?
    (A feladat szerint a String szam telefonszám bekérése után a megfelelő osztályba kerülünk, ahol további számítások vannak, de azt már megírtam.)

    private static PhoneNumber PhoneNumber;  //gyanítom erre is szükség lesz

    public static PhoneNumber create(String szam) {
            String regex = "\\d+";
            String firstLetter = String.valueOf(szam.charAt(0));
            if (szam.matches(regex) == false) {
                System.out.println("nem jó");
                System.exit(0);
            } else if (szam.matches(regex) == true) {
                System.out.println("tartalmazza");
                if (firstLetter == "1") {
                    PhoneNumber =  new KwakPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "8") {
                    PhoneNumber = new IkiPhoneNumber();
                    return PhoneNumber;
                } else if (firstLetter == "9") {
                    PhoneNumber = new McChipPhoneNumber();
                    return PhoneNumber;
                }
            }
              return PhoneNumber; //ez itt a fő kérdés, hogyan adjam vissza a megfelelő returnt
            }

    Ha tudod, hogy az 1 a Kwak, 8 az Iki, és a 9 pedig McChip, akkor azt is illene tudnod, hogy az összes többi esetben (0, 2, 3, stb) micsoda. Nos, ezt a bizonyos new MicsodaPhoneNumber()-t fogod azokban az esetekben visszaadni. :)
    Mi a célja az első karakter szerinti szortírozásnak?

    Megj. 1: Stringeket ne hasonlíts össze egymással az == operátort használva, mert hibás eredményt kaphatsz, a String#equals() javasolt helyette. De akár maradhatott volna char is az a firstLetter. Mindezektől függetlenül a String#startsWith() picit átláthatóbbá tenné a kódot.

    Megj. 2: A System.exit() nem szép, ne nagyon szokd meg. Majd amikor tanulsz az Exception-ről, egy világ tárul ki előtted.

    Megj. 3: Az == true elhagyható. Az == false is, amennyiben használod a ! operátorral jelzett tagadást. Vagy egyszerűen else if helyett csak simán az else kifejezést használod (persze ez esetben meg kell cserélni a két külső blokkot, és a végén lesz a hibás formátum jelzése, de ez semmit nem változtat a működésen).

    Megj. 4: Jávában a változók neveit kisbetűvel kezdjük, ez egy ilyen konvenció.

    Megj. 5: Ha megfigyeled, hogy minden if blokkod ugyanúgy végződik (return phoneNumber;), akkor felmerülhet a gondolat, hogy felesleges annyiszor megismételni azt, elegendő az összes if blokk mögött elhelyezni, csupán egyszer, az eredmény ugyanaz lesz.

Új hozzászólás Aktív témák

Hirdetés