public?static?boolean?isPalindrome(int?x)?{
創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、吉林網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為吉林等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
if?(x0)?{?return?false;?}
int?len=1;
for?(len=1;?(x/len)?=?10;?len*=10?);
while?(x?!=?0?)?{
int?left?=?x?/?len;
int?right?=?x?%?10;
if(left!=right){
return?false;
}
x?=?(x%len)?/?10;
len?/=?100;
}
return?true;
}
package JOptionPane;
import javax.swing.JOptionPane;
/**
* @author songml
*
*/
public class huiwen1 {
/**
* @param args
*/
public static void main(String[] args) {
//bFlg為true的時候,顯示對話框
//bFlg為false的時候,不顯示對話框,程序結(jié)束
boolean bFlg = true;
while (bFlg) {
String inputValue = JOptionPane.showInputDialog("請輸入一個五位整數(shù)");
//什么都沒有輸入的時候的處理
if ("".equals(inputValue) ){inputValue ="0";}
//點擊"取消"時候的處理
if (null == inputValue ) {bFlg = false;continue;}
//五位數(shù)判斷
if (inputValue.length() !=5) {
JOptionPane.showMessageDialog(null, "請輸入一個五位數(shù)");
//跳出本次(上面的那個)while,目的是不運行下面的回文數(shù)判斷
continue;
}
long inputValueLong = Long.parseLong(inputValue);
long temp = inputValueLong;
long reverseLong = 0L;
//回文數(shù)判斷
while (inputValueLong != 0) {
reverseLong = reverseLong * 10 + inputValueLong % 10;
inputValueLong = inputValueLong / 10;
}
if (reverseLong == temp) {
JOptionPane.showMessageDialog(null, "你輸入的是回文數(shù)");
bFlg =false;
} else {
JOptionPane.showMessageDialog(null, "你輸入的不是回文數(shù)");
}
}
System.exit(0);
}
}
這個問題,你可以逆向思考
現(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("不是回文");}
Scanner?sc?=?new?Scanner(System.in);??
System.out.println("請輸入一個整數(shù):");??
int?num?=?sc.nextInt();??
String?str1?=?num?+?"";??
//?String?str1?=?Integer.toString(num);??
//?String?str1?=?String.valueOf(num);??
StringBuilder?str2?=?new?StringBuilder(str1);??
str2.reverse();??
int?count?=?0;??
for?(int?i?=?0;?i??str1.length();?i++)?{??
if?(str1.charAt(i)?!=?str2.charAt(i))?{??
System.out.println(str1?+?"不是回文數(shù)");??
break;??
}?else?{??
count++;??
}??
}??
if?(count?==?str1.length())?{??
System.out.println(str1?+?"是回文數(shù)");??
}
望采納
按照你的要求編寫的,輸出從0到max中用二進(jìn)制表示和十進(jìn)制表示都是回文數(shù)的Java程序如下:
import?java.util.Scanner;
public?class?CCF?{
public?static?void?main(String[]?args)?{
Scanner?sc=new?Scanner(System.in);
System.out.print("請輸入一個整數(shù):");?
int?max=sc.nextInt();
for(int?i=0;i=max;i++){
String?num?=?String.valueOf(i);?
String?num2=Integer.toBinaryString(i);
String?reversenum=new?StringBuffer(num).reverse().toString();
String?reversenum2=new?StringBuffer(num2).reverse().toString();
if(reversenum.equals(num)??reversenum2.equals(num2)){
System.out.println(i+"用二進(jìn)制表示"+num2+"和十進(jìn)制表示"+i+"都是回文數(shù)");?
}
}
}
}
運行結(jié)果:
請輸入一個整數(shù):1000
0用二進(jìn)制表示0和十進(jìn)制表示0都是回文數(shù)
1用二進(jìn)制表示1和十進(jìn)制表示1都是回文數(shù)
3用二進(jìn)制表示11和十進(jìn)制表示3都是回文數(shù)
5用二進(jìn)制表示101和十進(jìn)制表示5都是回文數(shù)
7用二進(jìn)制表示111和十進(jìn)制表示7都是回文數(shù)
9用二進(jìn)制表示1001和十進(jìn)制表示9都是回文數(shù)
33用二進(jìn)制表示100001和十進(jìn)制表示33都是回文數(shù)
99用二進(jìn)制表示1100011和十進(jìn)制表示99都是回文數(shù)
313用二進(jìn)制表示100111001和十進(jìn)制表示313都是回文數(shù)
585用二進(jìn)制表示1001001001和十進(jìn)制表示585都是回文數(shù)
717用二進(jìn)制表示1011001101和十進(jìn)制表示717都是回文數(shù)
1、可以把這個5個數(shù)分解存在一個數(shù)組里面
2、通過循環(huán)判斷是否相等,循序次數(shù)就是長度整除2
在設(shè)置一個狀態(tài)標(biāo)記,為TRUE就是回數(shù),為false就不是,在循環(huán)中,一旦不相等就把狀態(tài)標(biāo)記改為false,終止循環(huán),當(dāng)循環(huán)結(jié)束時,狀態(tài)標(biāo)記還是為true就是回數(shù)。
import java.util.Scanner;
/*
* ?第三章 java運算符
* 課后作業(yè) 判斷回文數(shù)
* 5.2.1 ?由用戶輸入一個整數(shù),判斷是不是回文數(shù)(完全對稱的數(shù)),如果是 打印 true, 否則打印false
* 提示:本題僅要求判斷一個五位數(shù)是不是回文數(shù)
* 通過除法運算和求模運算符,可以分別求出一個五位數(shù)的每位上的值,然后進(jìn)行比較。
* Palindrome 回文數(shù)
*/
public class zuoye0352 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("輸入要判斷是否為回文數(shù)的數(shù)值:");
int i=sc.nextInt();
String str=""+i;
if(str.length()%2==0){
System.out.println(i+"不是回文數(shù)!"+str.length()%2);
}
//判斷反轉(zhuǎn)后 值是否相等 從而
else if(i==fanzhuan(i)){
System.out.println(i+"是回文數(shù)~");
}
else
System.out.println(i+"不是回文數(shù)!");
}
private static int fanzhuan(int input) {
int output = 0;//
while(input0){
//output= output*10;
output=output*10+input%10;
input=input/10;
}
return output;
}
}