2016-09-18 5 views
0

Ich weiß, dass dies nicht der einfachste Weg ist, ein Palindrom zu finden ... aber ich hatte gehofft, jemand könnte mir sagen, ob es eine Möglichkeit gibt, mehrere Zeichenfolgen von Ganzzahlen in eine einzige int zu konvertieren . Vielleicht baut das eine einzelne Saite von anderen? Unten habe ich eine Ausgabe, die die eingegebene Zahl umkehrt. Es kommt jedoch als eine Kette separater Ganzzahlen heraus. Könnte ich in der Lage sein, diese in einen einzigen int zu schreiben, dann boole es irgendwie gegen die ursprüngliche Nummer? Wenn ich ein ähnliches Thema übersehen habe, tut es mir leid. Ich sah mich um und fand keinen, der mein Problem eindeutig löste.Konvertieren mehrerer Zeichenfolgen in eine dann Parsing zu int

import java.util.Scanner; 

public class Palindrone{ 

    public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    System.out.print("Enter an integer between 2 and 6 digits:"); 
    int num1 = input.nextInt(); 

    int rev = 0; 
    //find last number 
    if(num1 >= 10){ 
    rev = num1%10; 
    System.out.print(rev); 
    } 
    //find 2nd to last and 3rd from last 
    if(num1 >= 100){ 
    rev = num1%100/10; 
    System.out.print(rev); 
    rev = num1%1000/100; 
    System.out.print(rev); 
    } 
    //find 4th from last 
    if(num1 >= 1000){ 
    rev = num1%10000/1000; 
    System.out.print(rev); 
    } 
    //find 5th 
    if(num1 >= 10000){ 
    rev = num1%100000/10000; 
    System.out.print(rev); 
    } 
    //find 6th 
    if(num1 >= 100000){ 
    rev = num1%1000000/100000; 
    System.out.print(rev); 
    } 
}  
} 

Ich versuche, aus Druck string (int rev) (int rev) (int rev) (int rev) zu eine solide Saite gehen dann in int konvertieren. Dann if (newInt == num1) run-Anweisung.

+2

Wenn Sie nach Palindrom suchen, ist es am besten, als String einzulesen. Dies würde es Ihnen erlauben, eine beliebige "Anzahl" bis zur maximalen String-Größe zu machen. Aber wenn Sie diesen Weg gehen wollen, können Sie eine "String rückwärtsNum" haben und dann die Strings verketten. so 'rückwärtsNum + =/* Was auch immer hier geht * /' –

+0

Ich stimme Michael Pickett sehr zu, dass es am besten ist, ein Palendrom zu finden. Was deine Frage über mehrere Strings von Ints in einem Int ... angeht, musst du klarer darüber sein, was du willst. Bitte geben Sie mindestens eine Beispieleingabe an und was Sie erwarten würden, wäre die Ausgabe. Wie gesagt, das ist verwirrend. – nhouser9

+0

Vorsicht "0" Ziffern. Sie scheinen zu versuchen, eine Zahl umzukehren, aber die Umkehrung von "10" ist "1", nicht "01". Wenn Sie möchten, dass sich das Ergebnis führende Nullen merkt (von nachgestellten Nullen der Eingabe), müssen Sie dies wirklich als String tun, nicht als Zahl. – Andreas

Antwort

1

Sie auf diese Weise ohne die Kopfschmerzen von String-int Umwandlung gehen könnten:

Scanner input = new Scanner(System.in); 
System.out.print("Enter an integer between 2 and 6 digits: "); 
String number = input.next();   
System.out.println(new StringBuilder(number).reverse()); //prints reverse number 
+0

Technisch gesehen brauchen Sie 'toString()' nicht in einem 'println() 'Aufruf. 'println (Object)' ruft 'toString()' für Sie auf. – Andreas

+0

richtig, danke @Andreas – Shahid

0

Einfach das folgende Verfahren verwendet Guava auszuführen, um die verschiedenen Schritte:

public static boolean palindrome(int number) { 
    // Split into an array of digits and reverse 
    List<String> digits = Lists.transform(
      Lists.reverse(
        Lists.transform(
          Lists.transform(
            Lists.charactersOf(Integer.toString(number)), 
            Functions.toStringFunction()), 
          Ints.stringConverter())), 
      Ints.stringConverter().reverse()); 

    // Join the strings and parse to an integer 
    int result = Integer.parseInt(Joiner.on("").join(digits)); 

    // And check if a palindrome 
    return (result == number); 
} 

So können Sie verwenden Dieselbe Technik mit Ihrem Code, wenn Sie am Anfang eine leere Liste erstellen und jede analysierte Ganzzahl am Ende der Liste hinzufügen. Allerdings ist die Art und Weise, wie Sie den Modulo-Operator mit der festen Folge von Zahlen verwenden, die jedes Mal mit 10 multipliziert, einschränkend. Stattdessen, wenn Sie diese Analyseverfahren verwenden möchten, sollten Sie eine Schleife statt:

List<Integer> digits = Lists.newArrayList(); 
while (number > 10) { 
    int digit = number % 10; 
    digits.add(digit); 
    number /= 10; 
} 

Dann umkehren und Transformation zurück in eine Liste von Strings, und in eine ganze Zahl konvertieren:

List<String> strings = Lists.transform(
     Lists.reverse(digits), 
     Ints.stringConverter().reverse()); 
int result = Integer.parseInt(Joiner.on("").join(strings)); 

Und wieder nur Überprüfen Sie auf Gleichheit mit der ursprünglichen Nummer.

Verwandte Themen