江苏建设监理协会官方网站,做预售的网站,网站开发与桌面应用开发,贵阳网站设计公司价格小鱼的数字游戏
题目描述
小鱼最近被要求参加一个数字游戏#xff0c;要求它把看到的一串数字 aia_iai#xff08;长度不一定#xff0c;以 000 结束#xff09;#xff0c;记住了然后反着念出来#xff08;表示结束的数字 000 就不要念出来了#xff09;。这对小鱼…小鱼的数字游戏
题目描述
小鱼最近被要求参加一个数字游戏要求它把看到的一串数字 aia_iai长度不一定以 000 结束记住了然后反着念出来表示结束的数字 000 就不要念出来了。这对小鱼的那点记忆力来说实在是太难了你也不想想小鱼的整个脑袋才多大其中一部分还是好吃的肉所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数以 000 结束以空格间隔。
输出格式
一行内倒着输出这一串整数以空格间隔。
样例 #1
样例输入 #1
3 65 23 5 34 1 30 0样例输出 #1
30 1 34 5 23 65 3提示
数据规模与约定
对于 100%100\%100% 的数据保证 0≤ai≤231−10 \leq a_i \leq 2^{31} - 10≤ai≤231−1数字个数不超过 100100100。
代码
第一次
import java.util.Scanner;SuppressWarnings(all)
public class Main{public static void main(String [] args){Scanner scanner new Scanner(System.in);StringBuffer stringBuffer new StringBuffer();String temp new String();while((tempscanner.next())!0) {stringBuffer.append(temp );tempnull;}temp stringBuffer.toString();String[] split temp.split( );for(int isplit.length ;i0;i--) {System.out.print(split[i-1] );}
}
}
正确的
import java.util.Scanner;SuppressWarnings(all)
public class Main{public static void main(String [] args){Scanner scanner new Scanner(System.in);StringBuffer stringBuffer new StringBuffer();String temp new String();while(!((tempscanner.next()).equals(0))) {stringBuffer.append(temp );tempnull;}temp stringBuffer.toString();String[] split temp.split( );for(int isplit.length ;i0;i--) {System.out.print(split[i-1] );}
}
}
错误的地方
用字符串、一些对象非基本数据类型 如果你要判断相等的话 最好是用equals 而不是 第一行的代码主要错在
while((tempscanner.next())!0)经过大量测试我发现我的问题并且优化了算是吧我的这个代码
优化部分
tempnull; 这行代码可以取出 应为String本身就是final属性 你重新赋值的话会改变指向并且原来的数据会被新数据覆盖虽然正常数据也是这样脑子抽了写代码的时候
问题部分
while((tempscanner.next())0)赋值运算符本身也是一个语句它的返回值是等号右边的值也就是赋值的值 我们写的是什么是0是数字0啊不是字符0字符0对应还有ascll码肯定不是数字0所以这行代码即使我们输入0也不会退出循环
但是其实输入0时temp本身还是和“0”的地址相同的 因为 对string直接赋值string对象指向常量池可以看我的String类解析那一篇 如果new string会先在堆建立一个空间里面有val属性指向我们常量池的属性我们string就是指向堆中的空间