對于回文這個問題,我們一般的解決方法是用遞歸
成都創(chuàng)新互聯(lián)公司是工信部頒發(fā)資質(zhì)IDC服務(wù)器商,為用戶提供優(yōu)質(zhì)的服務(wù)器托管服務(wù)
package com.axjy.yzn;
public class Recursive {
public static void main(String[] args) {
System.out.println("Is abcba a Palindrome?"+isPalindrome("abcdcba"));
}
public static boolean isPalindrome(String s){
if(s.length()=1){
return true;
}else if(s.charAt(0) != s.charAt(s.length()-1)){
return false;
}
return isPalindrome(s.substring(1,s.length()-1));
}
}
這個問題,你可以逆向思考
現(xiàn)在出現(xiàn)的現(xiàn)象是無論輸入什么,最終都會是回文,那也就是說,當(dāng)執(zhí)行
if(str1.equals(str2)){
System.out.println("是回文");}
else{
System.out.println("不是回文");}
一定都是執(zhí)行的第一個打印語句
也就是說str1.equals(str2)一定返回true
也就是說這equals兩個比較對象一定是相等,換句話說這個兩個對象其實指的是一個對象,只是不同的引用名而已
也就是說str1和str2都是指的一個StringBuffer對象
也就是說reverse()方法是直接返回了本對象
查看源碼證實:
/**
*?@since???JDK1.0.2
*/
@Override
public?synchronized?StringBuffer?reverse()?{
toStringCache?=?null;
super.reverse();
return?this;
}
可以看到最終返回this,也就是返回的是本對象,也就證實了剛的想法
所以綜上所訴,現(xiàn)在再來看一下整個代碼的執(zhí)行過程
創(chuàng)建了一個StringBuffer對象str1,里面包裝的字符串是"上海自來水
"
打印對象str1,所以此時打印的是:上海自來水
給對象str1調(diào)用reverse()方法,此時并沒有新創(chuàng)建一個StringBuffer,而是直接修改了str1里面的包裝字符串,改為"水來自海上",并返回了str1對象給str2
所以str1和str2其實都指的是一個StringBuffer(里面包含的都是"水來自海上")
此時打印str2,當(dāng)然顯示的是"水來自海上",其實若這是你再打印哈str1就明白了,因為這個是str1也打印出來的是"水來自海上"
個人建議寫法
因為你只是需要做一個回文的功能,因此可以只是把StringBuffer的reverse方法作為一個工具即可,所以建議如下寫法
String?str1?=?"上海自來水";
System.out.println("原來的話為:"+str1);
String?str2=new?StringBuffer(str1).reverse().toString();
System.out.println("正話反說為:"+str2);
if(str1.equals(str2)){
System.out.println("是回文");}
else{
System.out.println("不是回文");}
import?java.util.Scanner;
public?class?A?{
public?static?void?main(String[]?args)?{
Scanner?scanner?=?new?Scanner(System.in);
System.out.println("請輸入一個字符串:");
String?str?=?scanner.next();
boolean?isloop?=?isLoop(str);
if?(isloop)?{
System.out.println(str?+?"是回文字符");
}?else?{
System.out.println(str?+?"不是回文字符");
}
}
public?static?boolean?isLoop(String?str)?{
for?(int?i?=?0,?j?=?str.length()?-?1;?i??str.length()?/?2;?i++,?j--)?{
if?(str.charAt(i)?!=?str.charAt(j))?{
return?false;
}
}
return?true;
}
}
看你的要求真麻煩
給你一個簡單的不行聯(lián)系我
import java.util.Scanner;
public class test{
public static void main(String []dafd){
int num=(new Scanner(System.in)).nextInt();
String s=num.toString();
boolean b=true;
for(int i=0;is.length/2;i++){
if(s.charAt(i)!=s.charAt(s.length-i-1)){
b=false;
break;
}
}
System.out.pirntln(num+(b?"是":"不是")+"回文數(shù)");
}
}