Hogy lehetne Java-ban megírni azt, hogy egy Stringben lévő szvakat kiírjuk visszafele, úgy hogy a szavak megtartsák pozíciójukat, valamint a szóközök is megmaradjanak?
Adott egy String. A Stringben van egy szöveg, és ennek a szövegnek a szavit kellene visszafele kiírni, úgy, hogy az megtartsa a pozícióját, illetve a szóközök megmaradjanak (ha esetleg szóközzel kezdődik, felyeződik, két szóköz van két szó között, ezek megmaradjanak).
Bemenet: yge őttek moráh
Kimenet: egy kettő három
Splittel próbáltam megoldani, amibe belekezdtem a szóközöket nem tartja meg, illetve hibát ír a ciklusban: Array type expected; found: 'java.lang.String'
Scanner szoveg = new Scanner(System.in);
s = szoveg.nextLine();
String[] str = s.split(" ");
for (int i = 0; i < str.length; i++){
for (int j = str[i].length() - 1; j >= 0; j--) {
System.out.println(str[i][j]);
}
}
while not end.of.line do stack.push[line[index]];
while not stack.is.empty do print[stack.pop];
Semmi ertelme stacket hasznalni, csak feleslegesen emeled O(1)-rol O(n)-re a space complexityt.
Elindulsz egy i pointerrel a stringen es 2 eseted van:
- szoveg[i] whitespace -> kiirod es lepsz tovabb
- szoveg[i] nem whitespace -> elindulsz egy j = i pointerrel, elmesz a szo vegeig, kiirod a szot visszafele (tehat j-tol i-ig), vegul lepsz i-vel j + 1-re.
Semmi ertelme így túl bonyolítani, csak feleslegesen emeled O(1)-rol O(n)-re a time complexityt.
A stack-es megoldást várja el tőle a tanár.
7-es elmondod mit értek félre a pszeudokódodon(?)?
Én úgy látom a string karaktereit sorban betolod egy stack-be, majd kiírod őket a stack-ből pop-olva, ami a string megfordítását eredményezi. A feladat meg ugye nem ez.
Igazad van, nehogy már esélyt adjunk a kérdezőnek a gondolkodáshoz, hadd haljon meg hülyén szegény.
Nehogy eljusson addig a felismerésig, a kimenetet látva, hogy elég ha a push-okat addig folytatja amíg space-hez nem ér, onnan pop a kimeneti stringbe a stack aljáig, majd egy space-t hozzá rak és folytatja tovább ugyanígy.
Nehogy már megadjuk neki a saját erőből való építkezés luxusát. Adjunk neki totál kész megoldást, neveljük le arról, hogy megerőltesse az agytekervényeit.
A kérdésre válaszolva:
Jó úton indultál el; három hibád van:
System.out.println helyett használj csak System.out.print-et, hogy ne rakjon újsort minden karakter után.
Array type expected; found: 'java.lang.String'
Ez azért van, mert a String objektumokat nem lehet a [] operátorral indexelni, helyette a charAt metódus kell:
str[i][j] helyett str[i].charAt(j)
A harmadik az eltünt spacek. A split metódus megeszi a szeparátor karaktereket, úgyhogy ezt kompenzálnod kell a kiíratásnál.
A belsö ciklus után de még a külsön belülre ha teszel egy System.out.print(" ") -t, akkor pont jó lesz.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!