这个问题,你可以逆向思考
创新互联建站服务项目包括都兰网站建设、都兰网站制作、都兰网页制作以及都兰网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,都兰网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到都兰省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
现在出现的现象是无论输入什么,最终都会是回文,那也就是说,当执行
if(str1.equals(str2)){
System.out.println("是回文");}
else{
System.out.println("不是回文");}
一定都是执行的第一个打印语句
也就是说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,也就是返回的是本对象,也就证实了刚的想法
所以综上所诉,现在再来看一下整个代码的执行过程
创建了一个StringBuffer对象str1,里面包装的字符串是"上海自来水
"
打印对象str1,所以此时打印的是:上海自来水
给对象str1调用reverse()方法,此时并没有新创建一个StringBuffer,而是直接修改了str1里面的包装字符串,改为"水来自海上",并返回了str1对象给str2
所以str1和str2其实都指的是一个StringBuffer(里面包含的都是"水来自海上")
此时打印str2,当然显示的是"水来自海上",其实若这是你再打印哈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("请输入一个整数:");
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 + "不是回文数");
break;
} else {
count++;
}
}
if (count == str1.length()) {
System.out.println(str1 + "是回文数");
}
望采纳
Scanner in = new Scanner(System.in);
System.out.println("请输入一个整数N=:");
int input = in.nextInt();
int i = 0;
int sum = 0;
int record=input;
while(true){
i = input%10;
sum =sum*10+i;
input /= 10;
if(input==0) break;
}
if(sum==record)System.out.println("是回文");
else System.out.println("不是回文");
按照你的要求编写的判断五位数是不是回文数的Java程序如下
import java.util.Scanner;
public class HuiWenShu {
public static void main(String[] args) {
System.out.println("请输入一个五位正整数");
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
if(number10000 || number=100000){
System.out.println("输入的不是五位正整数!");
return;
}
int a=number/10000;
int b=number/1000%10;
int c=number/100%10;
int d=number/10%10;
int e=number%10;
if(a==e b==d){
System.out.println(number+"是回文数");
}else{
System.out.println(number+"不是回文数");
}
}
}
运行结果
请输入一个五位正整数
12321
12321是回文数