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()];

!直接得到想要的正确答案!由此可见,还是编程中一些比较细小的地方需要多加注意!

posted @ 2021-09-23 23:10  闫闫不是那个严  阅读(24)  评论(0编辑  收藏  举报