Hirdetés

Keresés

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

  • D4nte
    csendes tag

    Értem, de nem teljesen jó (biztos béna vagyok még)

    String change = actor1.toUpperCase();
    String change = actor2.toUpperCase();

    Az első még jó, de a másodiknál már nem fogadja el

    change is already defined in main(java.lang.String[])
    String change = actor2.toUpperCase();

    change után definiálni kell, a változtatandót ?
    vagy teljesen rosszul értelmeztem ?

    A legegyszerűbb akkor, ha meg is mutatom, amit leírtam.

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";

    // az adatok megjelenítése
    System.out.println(title + " (" + year + ")\n" + "A "
    + director.toUpperCase() + " film.\n\n" +
    role1 + "\t" + actor1.toUpperCase() + "\n" +
    role2 + "\t" + actor2.toUpperCase() + "\n" +
    role3 + "\t" + actor3.toUpperCase() + "\n" +
    role4 + "\t" + actor4.toUpperCase());
    }
    }

  • D4nte
    csendes tag

    Na szóval akkor újra!

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 );

    }
    }

    Ez az eredeti kód.
    Mikor futtatom akkor megjeleníti a szövegeket. (tudom, hogy tudjátok :D csak magam miatt írom le)
    Pl: Ada Holly Hunter
    Baines Harvey Keitel
    stb
    És az volna a kérdésem, hogyan lehet a legkönnyebben úgy megváltoztatni a kódot, hogy csak az actorok és a director legyen Teljesen nagybetűvel a többi marad az eredetiben.

    String change = director.toUpperCase();
    Ugye ez megváltoztatja a directorhoz rendelt Jane Campion nevet JANE CAMPION-ra
    + "\n" + change
    Ez pedig megjeleníti.

    Na már most azóta én már átírtam a kódot, így fest most.
    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok egy részének, nagy betűvel való megjelenítése
    String changedirector = director.toUpperCase();
    String changeactor1 = actor1.toUpperCase();
    String changeactor2 = actor2.toUpperCase();
    String changeactor3 = actor3.toUpperCase();
    String changeactor4 = actor4.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + changedirector + " film.\n\n" +
    role1 + "\t" + changeactor1 + "\n" +
    role2 + "\t" + changeactor2 + "\n" +
    role3 + "\t" + changeactor3 + "\n" +
    role4 + "\t" + changeactor4);
    }
    }

    A kérdés még mindig az, hogy van-e rövidebb megoldás erre ? vagy ez így jó ?
    Elnézést, hogy ilyen hosszúra sikeredet.

    Köszönöm a segítségetek.

    A change* változókba nem szükséges külön eltárolnod a nagybetűsített dolgokat, annyi, hogy a printedben hívod meg ugyan új a függvényt az eredetiekre, amennyiben a kiíratáson kívül másra nem akarod használni ezeket a nagybetűsített verziókat. Ettől még az eredeti stringek (az előző hozzászólásokból is kiderülten) változatlanok maradnak.

  • Lacces
    őstag

    Újabb kérdés! (elnézést a sok kérdés miatt)

    Adott az alábbi kód

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    String change = director.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change);
    }
    }

    A kiemelt részek felelősek a director nagybetűvel való megjelenítésért, az kérdésem is ehhez kapcsolódó lenne. Lehetséges úgy átírni a kódot hogy az actorokat és a rolekat egy Stringben alakítsa át nagybetűsre ?
    a megjelenítés már nem lényeges.

    Előre is köszönöm.

    update: Nem lehet kódban kiemelni vagy csak nekem nem akarja az igazságot.
    String change = director.toUpperCase();
    ez lenne a lényeges rész.

    Nekem sem tiszta, mit akarsz pontosan, de lehet én vagyok lüke hozzá.

    Ez lehet az amire gondoltál szerintem:
    String result = title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    (role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change).toUpperCase();


    System.out.println(result);

    role1-től a change-ig minden nagybetűs a többit meg kicsiben hagyja a result Stringben.
    A toUpperCase() után oda lehet szúrni a toStrin()-et is de ez nem kötelező, anélkül is nagybetűsre alakítja.

    Karma hsz-e is hasznos. De szerintem még nem tartasz ott, hogy tud, ő miért javasolta a StringBuildert :) Bár az is, igaz, hogy inkább forciklusban használják a StringBuildert.

    Ennek oka röviden, hogy a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan. Ha úgy mond konketenálsz egy String-et akkor új String jön létre.
    role1 + "t" -> akkor ez egy új String objektum ami a memóriában van, és nem a régi módoítottad, ami szintén a memóriában van, és marad a program végéig! StringBuilder esetében pedig a régit tudod módosítani, és így csak String objektum van a memóriában. A JVM nem módosítja sosem a Stringeket, hanem újat hozz létre mindig! És ezzel eszi a memóriát. És ez azért is baj, mert a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket.
    Bár van egy előnye ennek, az ha mégegyszer egy ugyanolyan String objektum jön létre (ugyanaz az értéke), akkor a JVM nem hozz létre új Strng-et hanem egész egyszerűen már egy meglévőre hivatkozik.
    De ha tévedet, jönnek a többiek és nagy örömmel kijavítanak. :DDD

  • Karma
    félisten

    Újabb kérdés! (elnézést a sok kérdés miatt)

    Adott az alábbi kód

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    String change = director.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change);
    }
    }

    A kiemelt részek felelősek a director nagybetűvel való megjelenítésért, az kérdésem is ehhez kapcsolódó lenne. Lehetséges úgy átírni a kódot hogy az actorokat és a rolekat egy Stringben alakítsa át nagybetűsre ?
    a megjelenítés már nem lényeges.

    Előre is köszönöm.

    update: Nem lehet kódban kiemelni vagy csak nekem nem akarja az igazságot.
    String change = director.toUpperCase();
    ez lenne a lényeges rész.

    Hogy mit szeretnél? Fontos lépés a programozásban, hogy pontosan tudod mit és miért akarsz csinálni. A zajt kordában kell tartani.

    Jelen példa esetén nekem nem jött át a szándék. Kifejthetnéd.
    Mindenesetre ha egy nagy stringben akarsz mindent összegyűjteni, akkor nincs más dolgod, mint összefűzöd őket. A rossz megoldás a + operátor, a kicsit jobb a StringBuffer/StringBuildet használata, nekem személy szerint az Apache Commons Lang nevű library StringUtils.join() metódusa tetszik a legjobban - nem vagyok a kerék újrafeltalálásának híve.

    Persze a gyakorlás az más tészta. De akkor is legyen legalább minimális értelme.

  • Karma
    félisten

    Köszi a linket, de itt már kerestem és nem találtam :S biztos nem vettem észre.

    A commented második részét kifejtenéd bővebben ? akár pm-ben is jöhet ha nem szeretnél offolni.
    Minden érdekel :)

    Ott van az pedig, a pow metódus az konkrétan.

  • Karma
    félisten

    Köszi!

    Valahogy sejtettem, hogy csak így lehet.
    weight = 0.45 * 3; ez a rész elég is volt :)
    A tizedes vesszőt csak megszokásból írtam így, de már kezdem megszokni a dolgokat.

    Viszont lenne egy újabb kérdésem
    Elöljáróban még annyit leszögeznék, hogy soha nem programoztam és nem is tanultam programozást.
    De nagyon érdekel és tetszik is. Ezután a java mellett döntöttem.

    Szóval adott az alább kód
    public class Matek {
    public static void main(String[] args) {
    int x = 5;
    int y = 6;
    System.out.println("Matek 5 to the second plus 6 to the second equal");
    int number = (x * x) + (y * y);
    System.out.println("Matek " + number);

    }
    }

    A feladat az lenne, hogy 2 szám négyzetét kiszámolja majd összeadja és azt megjeleníti.
    Le is fut és jól is működik. Nem is hibával kapcsolatos a kérdésem, inkább azt szeretném tudni, hogy van e más megoldás 2 szám négyzetének kiszámolására ? keresgettem googleban, de nem találtam olyat ami nekem jó lenne. vagy csak még nagyon kezdő vagyok :)
    Lehet nektek csúnya a fenti kód, de tőlem most csak ennyire futotta!
    Várom a véleményeket.

    Előre is köszönöm.

    Ez a számítás teljesen jó ebben a formában szerintem.

    A Math osztályban találsz tetszőleges hatványra emelő metódust, de a négyzet pont olyan, hogy ezért felesleges ezt bevonni.

    ---

    Az alaphelyzetre visszatérve nem vagyok annyira meggyőződve arról, hogy jól választottál nyelvet. Amit most írsz stílus, ami egyszer strukturált programozásig fejlődhet, szerintem nem igényli a Javát; viszont rossz Java programozási gyakorlatot ültethet el a fejedben, amit nehéz lesz kiirtani.

  • Superhun
    addikt

    Sziasztok

    Java programozást kezdtem tanulni könyvekből, mert érdekel nagyon, és tetszik is.
    Kellene egy kis segítség.

    int weight = 250;
    weight = weight + 0,45 * 3;

    Nem fogadja el a 0,45-öt (nem fordul le) és semmilyen nem egész számot. Megoldható valahogy ? vagy floatba lehet csak ?

    Előre is köszönöm.

    Két alapvető dolgot tegyünk tisztába:

    1. A tizedesvesszőt ponttal jelölik szinte minden prognyelvben :)
    2. Int típusú változnak nem adhatsz értékül lebegőpontos számot. Tehát vagy lebegőpontosként definiálod a weight változót,

    // lebegőpontos, a szám végén egy f betűvel jelöljük
    float weight = 250.0f;
    weight += 0.45f * 3;

    // dupla pontosságú lebegőpontos
    double weight = 250.0;
    weight += 0.45 * 3;

    vagy castolod a jobboldalt egész számmá:

    weight += (int)(0.45f * 3);

    Az utóbbinál figyelni kell, mert pontosságot veszíthetsz.

    Sok sikert a tanuláshoz! ;)

  • Frigo
    őstag

    Sziasztok

    Java programozást kezdtem tanulni könyvekből, mert érdekel nagyon, és tetszik is.
    Kellene egy kis segítség.

    int weight = 250;
    weight = weight + 0,45 * 3;

    Nem fogadja el a 0,45-öt (nem fordul le) és semmilyen nem egész számot. Megoldható valahogy ? vagy floatba lehet csak ?

    Előre is köszönöm.

    Cseréld le a vesszőt pontra (mivel ezt használják angolszász területen tizedes vessző helyett)

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