Java每日总结4
今天复习了Java的StringBuffer、数组、方法、Scanner类、以及面向对象方面的知识。
另外看了一个很简单的回文字符串的题,一开始使用了很常规的方法,代码如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); //输入一个字符串 boolean iFlag = true; for(int i = 0; i < str.length() / 2; i++) { if(str.charAt(i) != str.charAt(str.length() - i - 1)) { System.out.println("No"); iFlag = false; } } if(iFlag) System.out.println("Yes"); } }
后来又突发奇想通过使用String对象,利用字符数组参数的方法去解决这个问题,就发现了一些问题:
我的想法是不通过toCharArray()方法,而是通过双条件的for循环来达到与这个方法相同效果,但是发现虽然这样得到的字符串输出的字符串与原字符串相同,但是无论是通过equals()方法还是“==”的判断方式都无法得到“true”的结果,无论怎么判断,得到的结果都是”false“。
源代码如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str1 = sc.nextLine(); char[] str2 = new char[20]; for(int i = str1.length() - 1,j = 0;i >= 0;i--,j++) //这里相当于重写了str1.toCharArray()方法 { str2[j] = str1.charAt(i); } String str3 = new String(str2); //通过String对象(字符数组参数或者字符串参数)得到的字符串str3无法与原字符串str1进行正确匹配 System.out.println(str3); System.out.println(str1.equals(str3)); //false if(str1 == str3 || str1.equals(str3)) //false { System.out.println("Yes"); } else System.out.println("No"); } }
后来经过不断的试错发现了其中的问题:我自己写的for循环得到的字符串输出的样子与通过toCharArray()方法得到的字符数组一样,但是这两个字符数组的长度不同!
注意到上边代码中我标红的地方,把它改成:
char[] str2 = new char[str1.length()];
!直接得到想要的正确答案!由此可见,还是编程中一些比较细小的地方需要多加注意!