Palindromnummerprogram i Java Brug while & for Loop
⚡ Smart opsummering
Palindromnummerprogram i Java bestemmer, om en værdi læses identisk forlæns og baglæns ved at vende dens cifre. Denne artikel præsenterer algoritmen, en while-loop-version, en for-loop-version, en strengbaseret metode, rekursion, kanttilfælde og kompleksitetsanalyse med verificeret output.

Hvad er et palindromnummer?
A Palindrom nummer er et tal, der forbliver det samme tal, når det vendes om. For eksempel 131. Når cifrene vendes om, forbliver det det samme tal. Et palindromtal har refleksionssymmetri på den lodrette akse. Den samme idé gælder for et ord, der har samme stavemåde, når bogstaverne vendes om.
Eksempler på palindromtal i Java
121, 393, 34043, 111, 555, 48084
Eksempler på palindromord
LOL, MADAM
Hvert enkeltcifret værdi fra 0 til 9 er per definition et palindrom, fordi det at vende ét ciffer om producerer det samme ciffer.
Palindrom tal algoritme
Nedenfor er palindromnummeralgoritmens logik i Java:
- Hent det inputnummer, der skal kontrolleres for at være et palindrom.
- Kopier tallet ind i en midlertidig variabel og reverser det.
- Sammenlign det omvendte og det oprindelige nummer.
- Hvis de er ens, er tallet et "palindromtal".
- Ellers er tallet ikke et "palindromtal".
Selve omvendingen er den eneste del, der kræver omhu. To aritmetiske operationer udfører alt arbejdet, og tabellen nedenfor traces dem for værdien 171.
| Pass | et (resterende tal) | sidsteDigit = en % 10 | sum = (sum * 10) + sidsteDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
Efter den sidste gennemgang holder summen 171, hvilket er lig med det oprindelige input, så tallet bekræftes som et palindrom.
Sådan kontrolleres, om inputnummeret er palindrom eller ej
Nedenfor er et palindromprogram i Java med en WHILE-løkke. Løkken fortsætter, mens der er cifre tilbage, og print-sætningerne viser tilstanden af hver variabel under hver gennemgang.
package com.guru99; public class PalindromeNum { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 171; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number while(a > 0) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; a = a / 10; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code Output:
Input Number 171 Last Digit 1 Digit 1 was added to sum 0 Input Number 17 Last Digit 7 Digit 7 was added to sum 10 Input Number 1 Last Digit 1 Digit 1 was added to sum 170 Number is palindrome
Program til at kontrollere palindrom ved hjælp af for loop
Nedenfor er en Java Program for palindrom ved hjælp af en for-løkke. Headeren indeholder exit-testen og divisionen, så løkkekroppen må ikke dividere igen.
package com.guru99; public class PalindromeNumForLoop { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 185; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number for( ; a != 0; a /= 10 ) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code Output:
Input Number 185 Last Digit 5 Digit 5 was added to sum 0 Input Number 18 Last Digit 8 Digit 8 was added to sum 50 Input Number 1 Last Digit 1 Digit 1 was added to sum 580 Number is not palindrome
⚠️ Advarsel: En hyppig fejl er at holde a = a / 10; inde i for-løkkens brødtekst, mens headeren allerede indeholder a /= 10Tallet divideres derefter to gange pr. gennemløb, halvdelen af cifrene springes over, og et ægte palindrom som 121 rapporteres fejlagtigt som ikke et palindrom.
Palindrom-program i Java Brug af streng Reverse
Ved at konvertere værdien til tekst kan StringBuilder vende den tilbage i ét kald. Den samme metode fungerer også for ord, som den numeriske tilgang ikke kan håndtere.
package com.guru99; public class PalindromeString { public static boolean isPalindrome(String text) { // ignore case so MADAM and madam behave identically String clean = text.toLowerCase(); String reversed = new StringBuilder(clean).reverse().toString(); return clean.equals(reversed); } public static void main(String[] args) { System.out.println(isPalindrome("121")); System.out.println(isPalindrome("MADAM")); System.out.println(isPalindrome("Java")); } }
Code Output:
true true false
Palindrom-program i Java Brug af rekursion
Rekursion sammenligner det yderste tegnpar og kalder derefter sig selv på den krympende midtersektion. Metoden stopper, når der er færre end to tegn tilbage.
package com.guru99; public class PalindromeRecursion { public static boolean isPalindrome(String text, int left, int right) { // base case: pointers met or crossed if (left >= right) { return true; } if (text.charAt(left) != text.charAt(right)) { return false; } return isPalindrome(text, left + 1, right - 1); } public static void main(String[] args) { String value = "34043"; System.out.println(value + " is palindrome: " + isPalindrome(value, 0, value.length() - 1)); String other = "12345"; System.out.println(other + " is palindrome: " + isPalindrome(other, 0, other.length() - 1)); } }
Code Output:
34043 is palindrome: true 12345 is palindrome: false
Kanttilfælde og metodesammenligning
Tre input ødelægger naive implementeringer, så hver version bør testes imod dem før brug.
- Negative tal: Værdier som -121 er aldrig palindromer, fordi minustegnet ikke har nogen modstykke til sidst. Beskyt med
if (inputNumber < 0) return false;. - Efterfølgende nuller: Værdien 100 vender tilbage til 1, så sammenligningen returnerer korrekt falsk. Kun selve tallet 0 passerer mellem værdier, der ender på nul.
- Heltalsoverløb: RevSletning af et stort heltal, såsom 1,999,999,999, kan overskride heltalområdet. Deklarer sum som en long, når inputtet kan nærme sig grænsen.
Tabellen nedenfor sammenligner de fire tilgange, der er vist på denne side.
| Metode | Tidskompleksitet | Rumkompleksitet | Værker for ord | Noter |
|---|---|---|---|---|
| Mens løkken | O (log n) | O (1) | Ingen | Tydeligste demonstration af ciffervending |
| Til sløjfe | O (log n) | O (1) | Ingen | Identisk logik, kun division i headeren |
| StringBuilder omvendt | O (n) | O (n) | Ja | Korteste kode, allokerer en ny streng |
| rekursion | O (n) | O(n) stak | Ja | Nyttig til interviewdiskussioner om rekursion |
Cifferet extracDet her anvendte mønster optræder igen i mange øvelser. Fortsæt med Fibonacci-rækken i Java, Java program til at kontrollere et primtal, og Bubble Sorter algoritme ind JavaFor selve loop-syntaksen, gennemgå for hver løkke i Java og det bredere Java tutorial, og se Java strygere for den tekstbaserede metode.
