Hogy tudnám átírni ezt a programot? (Java)
A program addig olvas be szavakat a billentyuzetrol, amig nem kap egy ures sort. Ha azt kap, a program kilep. Amig nem kap azt addig pedig irja ki mindig, hogy az adott szo palindrom e. Valahogy sehogy sem sikerül ezt megoldanom. A kodom igy nez ki most;
import java.util.Scanner;
public class Palindrom {
public static void main (String[] args ) {
String original, reverse = "";
Scanner sc = new Scanner (System.in);
original = sc.nextLine ();
if (original.length ()! = 0) {
int lenght = original.length ();
for (int i = lenght 1; i> = 0; i--)
reverse = reverse + original.charAt (i);
if (original.equals (reverse)) {
System.out.printin ("yes");}
else {
System.out.println ("no"); }
else {
return; }
}
}
Ez tele van szintaktikai hibával, legalább azokat javítsd már ki, aztán pastebin linket adj.
Meg írd le, hogy milyen logikát akarsz pontosan megvalósítani és mivel van konkrétan problémád.
Valahogy igy.
import java.util.Scanner;
public class Palindrom {
public static void main (String[] args ) {
Scanner sc = new Scanner (System.in);
String original = sc.nextLine();
while(original.length() != 0){
String reverse = "";
int lenght = original.length ();
for (int i=lenght-1; i>=0; i--){
reverse = reverse + original.charAt (i);
}
if (original.equals(reverse)) {
System.out.println("yes");
}
else {
System.out.println("no");
}
original = sc.nextLine();
}
}
}
A palindrom ellenőrzés logikája elég hulladék egyébként.
Ciklusban fűzöl össze Stringet, ez ugye alapból négyzetes komplexitást eredményez és ezután még összehasonlítod az eredetit a megfordítottal, tehát végig mész gyakorlatilag s+2-szer a Stringen (s a karakterek száma a Stringben), holott elég lenne egyszer is.
Elindulsz egy bal és jobb pointerrel a String első és utolsó karakterétől és ameddig bal kisebb mint jobb, összehasonlítod a karaktereket. Ha nem egyeznek, akkor nem palindrom, ha végig megy a ciklus, akkor meg igen
(a szóközöket, írásjeleket meg nyilván átugrod, ha nem csak szavakat vizsgálsz, hanem mondatokat is akár, ez nem derül ki a leírásodból).
A teljesség kedvéért:
boolean palindrom = IntStream.range(0, length / 2)
.allMatch(i -> word.charAt(i) == word.charAt(length - i - 1));
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!