Hirdetés

Keresés

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

  • bucsupeti
    senior tag

    Do-while-lal oldottam meg végül, köszi.

    public static void kaloriaKiir(ArrayList<Gyumolcs> ertekek, File f) {

    Scanner scan = new Scanner(System.in, "ISO-8859-2");
    System.out.println("Kérem a gyümölcs nevét: ");
    String nev = scan.nextLine();
    do {

    if (!gyum.toString().contains(nev)) {
    System.out.println("Nem megfelelő név, újat kérek!");
    nev = scan.nextLine();
    }

    } while (!gyum.toString().contains(nev));

    if (gyum.toString().contains(nev)) {
    System.out.println("Kérem a mennyiséget grammban: ");
    int menny = scan.nextInt();

    for (Gyumolcs gyum : ertekek) {
    if (nev.equals(gyum.Megnevezes)) {
    System.out.println(menny + " gramm " + gyum.Megnevezes + " " + gyum.kcal / 100 * menny + " gramm kalóriát tartalmaz.");

    }

    }

    }

    }

    Biztos sok sok furcsaság van a kódban, de most a cél átmenni a vizsgán. ;]

    A static metódus arra enged következtetni hogy valószínű ugyan abban az osztályban van ez a kaloriaKiir metódus amiben a main() és azért static hogy tudd meghívni a main-ben.
    Lehet hogy a vizsgára amire készülsz ez jó és elegendő. Én a következő osztályokkal dolgoznék:
    Gyumolcs : egyetlen gyümölcs adatait tároló POJO osztály. semmi extra metódus nem kell ebbe. Max a toString-et írd felül hogy az objektum értékeit adja vissza.
    KaloriaTabla : lenne benne egy ArrayList<Gyumolcs> lista, egy adatbeolvasó metódus ami feltöltené ezt a listát. Konstruktorba feltölteném a listát. Kell egy kereső metódus ami egy string alapján keres a listában a gyümölcs neve alapján és Gyumolcs-öt adnék vissza, vagy null-t ha nincs. (Ez az osztály lehetne akár singleton is, ha már tanultátok)
    A futtató osztályban (amiben a main() van), megírnám a felhasználói felületet, menüt, a névbekérést stb. Itt példányosítanám a KaloriaTabla-t és ennek a kereső metódusát hívogatnám.
    Igaza van Sirpi kollégának abban hogy a contains használata nem a legjobb megoldás. Ha contains-t használsz akkor kezeld úgy hogy nem csak egy hanem több gyümölcsöt is kaphatsz eredményül, és ilyenkor minden találatot jeleníts meg.

  • Sirpi
    senior tag

    Do-while-lal oldottam meg végül, köszi.

    public static void kaloriaKiir(ArrayList<Gyumolcs> ertekek, File f) {

    Scanner scan = new Scanner(System.in, "ISO-8859-2");
    System.out.println("Kérem a gyümölcs nevét: ");
    String nev = scan.nextLine();
    do {

    if (!gyum.toString().contains(nev)) {
    System.out.println("Nem megfelelő név, újat kérek!");
    nev = scan.nextLine();
    }

    } while (!gyum.toString().contains(nev));

    if (gyum.toString().contains(nev)) {
    System.out.println("Kérem a mennyiséget grammban: ");
    int menny = scan.nextInt();

    for (Gyumolcs gyum : ertekek) {
    if (nev.equals(gyum.Megnevezes)) {
    System.out.println(menny + " gramm " + gyum.Megnevezes + " " + gyum.kcal / 100 * menny + " gramm kalóriát tartalmaz.");

    }

    }

    }

    }

    Biztos sok sok furcsaság van a kódban, de most a cél átmenni a vizsgán. ;]

    Ez a rész háromszor is szerepel: gyum.toString().contains(nev)

    Egyrészt a harmadik automatikusan teljesülni fog, elhagyható, egyetlen vizsgálat is elég. Másrészt gondolom az elso gyum helyett az ertekek változót akartad használni, így az értékek.contains(nev) pont az, amire szükséged van, sőt, a toString-ezés miatt ha akár egyetlen betűt írsz be, ami a felsorolt gyümölcsök valamelyikében szerepel, azt is el fogja fogadni, nem néz teljes egyezést. Kicsit egyszerűsítve:

    public static void kaloriaKiir(List<Gyumolcs> ertekek) {

            Scanner scan = new Scanner(System.in, "ISO-8859-2");
            System.out.println("Kérem a gyümölcs nevét: ");
           String nev;
           while (!ertekek.contains(nev = scan.nextLine())) {
                   System.out.println("Nem megfelelő név, újat kérek!");
           }

             System.out.println("Kérem a mennyiséget grammban: ");
             int menny = scan.nextInt();

             for (Gyumolcs gyum : ertekek) {
                 if (nev.equals(gyum.Megnevezes)) {
                     System.out.println(menny + " gramm " + gyum.Megnevezes + " " + gyum.kcal / 100 * menny + " gramm kalóriát tartalmaz.");

                 }
           }

       }

  • Drizzt
    nagyúr

    Hölgyek/Urak!

    Programozás vizsgára készülök, az egyik feladatnál megakadtam.

    Csv file-ból kellett adatokat beolvasni ArrayListbe, aztán mindenféle metódusokat gyártani rá. A csv file-ban gyümölcsök nevei (pl. alma, körte, stb) és hozzájuk tartozó adatok vannak, többek között a kalória.

    A feladat az, hogy a metódus kérje be a felhasználótól a gyümölcs nevét és a mennyiséget, és ez alapján mondja meg, hogy az adott mennyiségű gyümölcs hány kalóriát tartalmaz.

    Megcsináltam a metódust, azt szeretném elérni, hogy ha a felhasználó rossz nevet ír be (ami nem szerepel az ArrayListben), akkor addig kérje, amíg jót nem ad (jelen állás szerint ha rossz nevet ír be a felhasználó, leáll a program).

    Itt a kód:
    public static void kaloriaKiir(ArrayList<Gyumolcs> ertekek, File f) {
            Scanner scan = new Scanner(System.in, "ISO-8859-2");
            System.out.println("Kérem a gyümölcs nevét: ");
            String nev = scan.nextLine();
            if (gyum.toString().contains(nev)) {
                System.out.println("Kérem a mennyiséget grammban: ");
                int menny = scan.nextInt();
                for (Gyumolcs gyum : ertekek) {
                    if (nev.equals(gyum.Megnevezes)) {
                        System.out.println(menny + " gramm " + gyum.Megnevezes + " " + gyum.kcal / 100 * menny + " gramm kalóriát tartalmaz.");
                    }
                }
            } else {
                System.out.println("Nem megfelelő név!");
            }
        }

    Van valami ötletetek?

    Bulizhatz rekurzioval: az utolso else agban meghivhatod a kaloriaKiirt megegyszer.
    Bulizhatsz do-while ciklussal: do... while (beolvasott szo nem gyumolcs).

    Amugy van sok furcsasag a kododban. Lehet csak a tableten nem latom, de mi szukseged van a File f parameterre? Mi a gyum, honnan jon az extended for loop elott. Van egy static String gyumod az osztalyban valamilyen ertekkel?

  • bandi0000
    nagyúr

    Hölgyek/Urak!

    Programozás vizsgára készülök, az egyik feladatnál megakadtam.

    Csv file-ból kellett adatokat beolvasni ArrayListbe, aztán mindenféle metódusokat gyártani rá. A csv file-ban gyümölcsök nevei (pl. alma, körte, stb) és hozzájuk tartozó adatok vannak, többek között a kalória.

    A feladat az, hogy a metódus kérje be a felhasználótól a gyümölcs nevét és a mennyiséget, és ez alapján mondja meg, hogy az adott mennyiségű gyümölcs hány kalóriát tartalmaz.

    Megcsináltam a metódust, azt szeretném elérni, hogy ha a felhasználó rossz nevet ír be (ami nem szerepel az ArrayListben), akkor addig kérje, amíg jót nem ad (jelen állás szerint ha rossz nevet ír be a felhasználó, leáll a program).

    Itt a kód:
    public static void kaloriaKiir(ArrayList<Gyumolcs> ertekek, File f) {
            Scanner scan = new Scanner(System.in, "ISO-8859-2");
            System.out.println("Kérem a gyümölcs nevét: ");
            String nev = scan.nextLine();
            if (gyum.toString().contains(nev)) {
                System.out.println("Kérem a mennyiséget grammban: ");
                int menny = scan.nextInt();
                for (Gyumolcs gyum : ertekek) {
                    if (nev.equals(gyum.Megnevezes)) {
                        System.out.println(menny + " gramm " + gyum.Megnevezes + " " + gyum.kcal / 100 * menny + " gramm kalóriát tartalmaz.");
                    }
                }
            } else {
                System.out.println("Nem megfelelő név!");
            }
        }

    Van valami ötletetek?

    rakj bele egy while ciklust 1.0 verziónak jó, nem tudom van e erre kifinonultabb beépített lehetősêg

  • floatr
    veterán

    Na ez szerintem már kellően sok variáció a témára. Csak ámulni fog a tanár. :D

    long vowelCount = text.split("[aáeéiíoóöőuúüű]").length - 1
    :DDD

    bár ez több magánhangzónál nem működik jól :)

  • floatr
    veterán

    Olyant is csinálhatsz amúgy, hogy egy stringbe betolod az összes magánhangzót, és indexOf metódussal ránézel. Ha optimalizálni akarod, akkor sorba rendezett karakterekkel logaritmikus kereséssel is mehet :D

    Amúgy meg:
    String text = ...; // a beolvasott cucc
    long vowelCount = text.toLowerCase()
        .chars()
        .filter(c -> "aáeéiíoóöőuúüű".indexOf((char) c) != -1)
        .count();

    :P

  • Froclee
    őstag

    Elég puritán lett. ;]

    package gyak27;

    import java.util.Scanner;

    public class Gyak27 {

    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in, "8859_2");
    String vers;
    System.out.println("Kérem a versrészletet: ");
    vers = scan.nextLine();

    int számláló = 0;

    for (int i = 0; i < vers.length(); i++) {

    if (vers.charAt(i) == 'a' || vers.charAt(i) == 'á'
    || vers.charAt(i) == 'e' || vers.charAt(i) == 'é'
    || vers.charAt(i) == 'i' || vers.charAt(i) == 'í'
    || vers.charAt(i) == 'o' || vers.charAt(i) == 'ó'
    || vers.charAt(i) == 'ö' || vers.charAt(i) == 'ő'
    || vers.charAt(i) == 'u' || vers.charAt(i) == 'ú'
    || vers.charAt(i) == 'ü' || vers.charAt(i) == 'ű'
    || vers.charAt(i) == 'A' || vers.charAt(i) == 'Á'
    || vers.charAt(i) == 'E' || vers.charAt(i) == 'É'
    || vers.charAt(i) == 'I' || vers.charAt(i) == 'Í'
    || vers.charAt(i) == 'O' || vers.charAt(i) == 'Ó'
    || vers.charAt(i) == 'Ö' || vers.charAt(i) == 'Ő'
    || vers.charAt(i) == 'U' || vers.charAt(i) == 'Ú'
    || vers.charAt(i) == 'Ü' || vers.charAt(i) == 'Ű') {

    számláló++;

    }

    }

    System.out.println("A magánhangzók száma a szövegben: " + számláló);

    }

    }

    Ahogy floatr írta,így azért szebb,

  • bandi0000
    nagyúr

    Interneten utánaolvasva csak magasabb szintű megoldásokat találtam, de próbálkozom. :)

    Basszus hogy a harmadiknál erre nem gondoltam. :W

    Mondom az elsőre szerintem a leggyorsabb a dupla for, bár biztos van rá jobb megoldás, azt gondolom azért tudod, hogy mi :D Bár ha if-else-el kell megcsinálni akkor azzal

  • bandi0000
    nagyúr

    Hölgyek/Urak!

    Elsőéves egyetemistaként ismerkedünk a Java programozás alapjaival. Van egy szép hosszú minta feladatsorom amin lépkedek, de van egy-kettő amivel nem igazán tudok elindulni és egyelőre a neten sem találtam sok használhatót, nevezetesen:
    Kérjünk be a felhasználótól egy versrészletet, és számláljuk meg benne a magánhangzókat!

    Kérjünk be ellenőrzötten a felhasználótól egy-egy egytizedes jegyű, kéttizedes jegyű, háromtizedes jegyű és négytizedes jegyű számot! Írassuk ki egymás alá balra, majd jobbra igazítva is a négy számot 10 karakterhosszan 4 tizedesjeggyel!

    A program a felhasználó által megadott együtthatókkal számítsa ki a másodfokú egyenletet! Negatív diszkrimináns esetén adja meg a komplex gyököket!

    Valami ötlet merre induljak? A printf és az if/else szekcióban vannak a feladatok, így azt gondolom ezekkel kellene megoldani, a félév során egyébként az osztályokig jutottunk.

    Első résznél biztos van egyszerűbb megoldás, de nekem hirtelen egy dupla for ugrik be, létrahozol egy String változót, amibe belerakod egy szövegként a magánhangzókat, külső forral ezen mész végig, a belső forban meg a vers részleten, és ellenőrzöd, hogy egyeznek e, ha igen, akkor növelsz egy számlálót

    Másodikra talán ez segít

    Harmadiknák meg mi nem világos? igazából csak elvégzed a műveleteket, esetleg annyi, hogy a gyök alatti kifejezést ellenőrzöd, hogy - lett e, ha igen, akkor beszorzod -1-el, gyököt vonsz, és kiíratásnál még hozzáírsz egy j-t a végére

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