質問

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