2016-09-18 3 views
0

Я знаю, что это не самый простой способ найти палиндром ... но я надеялся, что кто-то скажет мне, есть ли способ конвертировать несколько строк целых чисел в один int , Может быть, это строит одну строку из других? Ниже у меня есть выход, который меняет номер, который вы вводите. Однако он выводится как цепочка отдельных целых чисел. Смогу ли я придумать это в один int, а затем как-нибудь обмануть его с исходным номером? Если я упустил тему, похожую на это, извините. Я проверил и не нашел тот, который четко решил мою проблему.Преобразование нескольких строк в один, а затем синтаксический анализ для 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); 
    } 
}  
} 

Я пытаюсь перейти от печати строки (интермедиат об) (интермедиате об) (интермедиате об) (интермедиате оборотах) в один сплошную строку, то преобразование в целом. Затем if (newInt == num1) запускает оператор.

+2

Если вы ищете палиндром, то лучше всего читать в виде строки. Это позволит вам делать любой размер «до» до размера String max. Но если вы хотите пойти этим путем, вы можете иметь «String backwardsNum», а затем конкатенировать строки. так что 'backwardsNum + =/* Что бы там ни происходило * /' –

+0

Очень согласен с Майклом Пикеттом о лучшем способе поиска палдрома. Что касается вашего вопроса о множественных цепочках ints в int ..., вам нужно более четко узнать, что вы хотите. Пожалуйста, укажите хотя бы пример ввода и то, что вы ожидаете от вывода. Как было сказано, это сбивает с толку. – nhouser9

+0

Остерегайтесь цифр '0'. Кажется, вы пытаетесь изменить число, но наоборот '10' -' 1', а не '01'. Если вы хотите, чтобы результат запоминал ведущие нули (от конечных нулей ввода), вам действительно нужно сделать это как строку, а не как число. – Andreas

ответ

1

Вы могли бы пойти по этому пути без головной боли преобразования строк INT:

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

Вам технически не нужно 'toString()' в вызове 'println()'. 'println (Object)' будет вызывать 'toString()' для вас. – Andreas

+0

право, спасибо @ Andreas – Shahid

0

Easy, следующий метод использует Guava для выполнения различных этапов:

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); 
} 

Таким образом, вы можете использовать тот же метод с вашим кодом, если вы создаете пустой список в начале и добавляете каждое разобранное целое число в конец списка. Однако то, как вы используете оператор модуля с фиксированной последовательностью чисел, умножающихся на 10 каждый раз, является предельным. Вместо этого, если вы хотите использовать этот метод синтаксического анализа, рассмотрим цикл вместо:

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

Тогда обратное и преобразовать обратно в список строк, и преобразовать в целое число:

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

И снова только проверьте равенство с исходным номером.