سؤال

What this program is trying to do is go through numbers starting at "000000" going all the way up to "999999" and trying to find numbers which are palindromes. (eg: 0000000000). I am having trouble with reversing the string and creating a valid result. The system adds the next 4 numbers creating a length 10 string.

import java.util.Arrays;
public class TestPalindrome{

 public static void main(String []args){
    int[] intArray = new int[6];
    String[] strArray = new String[99];
    String nextString;
    int count = 0;
    int nextnum;
    int thisnum;
    String thisString = "";
    String s = "000000";
       nextString = s;   
do {       
    for(int i=0;i<6;i++)    {
  intArray[i] = Integer.parseInt(String.valueOf(nextString.charAt(i)));
                            }
   int pos1 = intArray[5];
   int pos2 = intArray[4]*10;
   int pos3 = intArray[3]*100;
   int pos4 = intArray[2]*1000;
   int pos5 = intArray[1]*10000;
   int pos6 = intArray[0]*100000;
   nextnum = (pos1 + 1) + pos2 + pos3 + pos4 + pos5 + pos6;
   thisnum = pos1 + pos2 + pos3 + pos4 + pos5 + pos6;


// If any of below values = 10, then number is not used
int d7 = ((4*intArray[0])+(10*intArray[1])+(9*intArray[2])+(2*intArray[3])+intArray[4]+(7*intArray[5])) % 11;
int d8 = ((7*intArray[0])+(8*intArray[1])+(7*intArray[2])+(intArray[3])+9*intArray[4]+(6*intArray[5])) % 11;
int d9 = ((9*intArray[0])+(intArray[1])+(7*intArray[2])+(8*intArray[3])+7*intArray[4]+(7*intArray[5])) % 11;
int d10 = ((intArray[0])+(2*intArray[1])+(9*intArray[2])+(10*intArray[3])+4*intArray[4]+(intArray[5])) % 11;


if (d7==10) {  }
else if (d8==10) { }
else if (d9==10) {  }
else if (d10==10) { }
else {

String s7 = Integer.toString(d7);
String s8 = Integer.toString(d8);
String s9 = Integer.toString(d9);
String s10 = Integer.toString(d10);
 thisString = String.format("%06d", thisnum);
String concat = thisString + s7 + s8 + s9 + s10;

StringBuilder input = new StringBuilder(concat);   
StringBuilder value = input.reverse();
if( value == input){
        System.out.println("" + concat);
        strArray[count] = concat;
        count = count+1; 
}
else {}


}
         nextString = String.format("%06d", nextnum);
    }
         while (nextnum < 1000000 && nextnum > 000000);{

          }
 }
} 

The problem is that it displays all numbers and not just palindromes. Any help is very welcomed.

هل كانت مفيدة؟

المحلول

I would simply put the numbers into strings. Then reverse the string and see if it equals the original.

String originalString = "110011";
String newString = new StringBuilder(originalString ).reverse().toString();
if (originalString.equals(newString )) {
    //Is a palindrome
}

Note: Consider how you want to handle leading zeros. "11" is a palindrome, but if you need 4 values then "0011" is not.

نصائح أخرى

One funny way is to use just one for-loop :

public static void main(String [] args){

        for(String s = "000000"; !s.equals("1000000");  s = String.format("%06d",Integer.parseInt(s)+1)){
            if(new StringBuilder(s).reverse().toString().equals(s))
                System.out.println(s);
        }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top