使用循环错误测试回文

时间:2013-12-11 19:24:57

标签: java arrays string loops palindrome

这个程序试图做的是从“000000”开始一直到“999999”,并试图查找回文数字。 (例如:0000000000)。 我在翻转字符串并创建有效结果时遇到问题。系统添加接下来的4个数字,创建长度为10的字符串。

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

          }
 }
} 

问题是它显示所有数字而不仅仅是回文。任何帮助都非常欢迎。

2 个答案:

答案 0 :(得分:1)

我只想将数字放入字符串中。然后反转字符串,看它是否等于原始字符串。

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

注意:考虑如何处理前导零。 “11”是回文,但如果你需要4个值,则“0011”不是。

答案 1 :(得分:0)

一个有趣的方法是只使用一个for循环:

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