回文数
就是从前向后读和从后向前读出的结果都是一样的。比如:1、2、121、123321
下面给出回文数判断的代码:
/**
* 回文数 判断一个数是不是回文数(正读反读都一样:123321、121、1)
*
* @author cythine
*
*/
public class PalindromicNum {
public String isPalindromic(String num) {
int len = num.length();//数字的长度
char head_c;//从数字前端取字符
char stern_c;//从数字尾端取字符
int head = 0;//前端的指针
int stern = len - 1;//尾端的指针
if (len == 0) {
return "Please input correct num!";
}
while (head <= stern) {
head_c = num.charAt(head);
stern_c = num.charAt(stern);
//下面的判断是防止数字中混有其他字符
if(head_c>'9' || head_c<'0' || stern_c>'9' || stern_c<'0'){
return "Please input correct num!";
}
if (head_c == stern_c) {
head++;
stern--;
} else {
return "num:"+num+" is not palindromic!";
}
}
return "num:"+num+" is palindromic!";
}
}
顺便用junit4写了个单元测试类,如下:
public class PalindromicNumTest {
@Test
public void testIsPalindromic() {
PalindromicNum paNum = new PalindromicNum();
String res1 = paNum.isPalindromic("123321");
String res2 = paNum.isPalindromic("1");
String res3 = paNum.isPalindromic("0");
String res4 = paNum.isPalindromic("121");
String res5 = paNum.isPalindromic("123421");
String res6 = paNum.isPalindromic("");
String res7 = paNum.isPalindromic(" ");
String res8 = paNum.isPalindromic("123%21");
assertEquals( "num:123321 is palindromic!", res1);
assertEquals( "num:1 is palindromic!", res2);
assertEquals( "num:0 is palindromic!", res3);
assertEquals( "num:121 is palindromic!", res4);
assertEquals( "num:123421 is not palindromic!", res5);
assertEquals( "Please input correct num!", res6);
assertEquals( "Please input correct num!", res7);
assertEquals( "Please input correct num!", res8);
}
}
测试结果:
其实这个回文数的判断就类似于将数组当中的奇偶数换位置(奇数在前,偶数在后)。关键就是对于前后两个元素index的移动和控制。
还可以通过StringBuilder进行字符串反转,代码如下:
public class PalindromicNum {
public static void main(String[] args) {
String res = PalindromicNum.IsPalindromicNum("12321");
System.out.println(res);
}
public static String IsPalindromicNum(String num) {
String num_reverse = new StringBuilder(num).reverse().toString();
char headC;
char sternC;
int len = num.length();
for (int i = 0; i < len; i++) {
headC = num.charAt(i);
sternC = num_reverse.charAt(i);
if (headC > '9' || headC < '0' || sternC > '9' || sternC < '0') {
return "Please input correct num!";
}
if(headC==sternC){
continue;
}else{
return "this num "+num+" is not palindromic! ";
}
}
return "this num "+num+" is palindromic! ";
}
}