day 08---有用

案例: 演示使用Scanner的小细节问题.

问题描述:
先用nextInt()接收用户录入的整数, 在用nextLine()接收用户录入的字符串, 会导致用户无法录入字符串的情况.
产生原因:
1. nextInt() 和 nextLine()的结束标记都是:
2. nextInt()方法只接收用户录入的数字, 不识别(不接收)
3. 遗留的 被 nextLine()方法识别到, 所以导致该方法直接结束, 没有让用户录入.
解决方案:
方式1: 重新new一个Scanner对象.
方式2: 重新调用一次nextLine()方法.
方式3: 通过 next()方法接收.
方式4: 都用字符串接收, 然后把字符串形式的整

 

 

案例: 演示字符串的常量优化机制.

结论(记忆): Java中有常量优化机制:
针对于byte类型:
如果是变量相加:
会提升类型, 然后在运算, 提升规则: byte, short, char -> int -> long -> float -> double
如果是常量相加:
会直接运算, 然后看结果在不在左边的数据类型范围内, 在, 不报错, 不在, 就报错.
针对于String类型:
如果是变量相加:
会在堆区开辟空间.
如果是常量相加:
会直接在常量池中进行拼接, 不会在堆区开辟新空间.

上述的相同点是: 如果同时有 变量 和 常量 参与操作, 按照 变量 的规则走.

 

 

 

需求:
1.定义方法reverse(), 实现字符串的反转.
2.在main方法中键盘录入一个字符串, 调用上述的方法后, 在控制台输出结果.
3.例如: 键盘录入abc, 输出结果cba.
提示: 用for循环, 倒序遍历数组, 然后拼接每一个元素即可.
*/
public class Demo06 {
public static void main(String[] args) {
//1. 提示用户录入字符串, 并接收.
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个字符串: ");
String str = sc.nextLine(); //abc

//2. 定义一个新的字符串, 用来记录反转后的结果.
String newStr = reverse(str);
//6. 打印结果.
System.out.println("反转后, 结果是: " + newStr);

}

public static String reverse(String str) {
String newStr = "";

//3. 把原始字符串转成字符数组.
char[] chs = str.toCharArray(); //'a', 'b', 'c'

//4. 倒序遍历, 获取每一个字符.
for (int i = chs.length - 1; i >= 0; i--) {
//chs[i] 记录的就是 原始字符串中的每一个字符. 'a', 'b', 'c'
//5. 将获取到的字符拼接给: 新的字符串.
newStr += chs[i];
}

 

原文地址:https://www.cnblogs.com/shan13936/p/13833227.html