什么(s.charAt(low)!= s.charAt(high)){“和” int high = s.length()-1;

时间:2019-12-01 12:14:54

标签: java string loops

因此,我正在学习使用教科书进行编码,突然间它给出了一个使用循环的示例,并且使用了许多以前从未涉及过的概念和代码。请有人告诉我if (s.charAt(low) != s.charAt(high))int high = s.length() - 1;是什么。另外,为什么low = 0呢?我还没学会。这是查找回文的代码。谢谢

import java.util.Scanner;

public class Palindrome {
    /** Main method */
    public static void main(String[] args) {
        // Create a Scanner
        Scanner input = new Scanner(System.in);

        // Prompt the user to enter a string
        System.out.print("Enter a string: ");
        String s = input.nextLine();

        // The index of the first character in the string
        int low = 0;

        // The index of the last character in the string
        int high = s.length() - 1;

        boolean isPalindrome = true;
        while (low < high) {
            if (s.charAt(low) != s.charAt(high)) {
                isPalindrome = false;
                break;
            }
            low++;
            high--;
        }

        if (isPalindrome)
            System.out.println(s + " is a palindrome");
        else
            System.out.println(s + " is not a palindrome");
    }
}

1 个答案:

答案 0 :(得分:-1)

假设您输入文本Hello

文本长度Hello5

int high = s.length() - 1表示您正在将4(即5-1)存储到变量high中。 String中第一个字符的索引为0。因此,HHello的索引是0e的索引是1,依此类推。因此,最后一个字符o的索引是4,它等于"Hello".length() - 1

while循环的第一次迭代中,条件if (s.charAt(low) != s.charAt(high))将第一个字符(即H)与最后一个字符(即o)进行比较文本Hello;因为low的值为0,而high的值为4。这也可以回答您的问题

  

为什么低= 0?

如果索引0处的字符等于索引4处的字符,则low的值应增加为1,而{{1 }}可以减少到high,以便在3循环的下一次迭代中,可以将索引while处的字符(即第二个字符)与索引{ {1}}(即倒数第二个字符)。但是,在这种情况下(即,当输入为1时,3在第一次迭代中就变成Hello,从而导致s.charAt(low) != s.charAt(high)循环true(即停止执行下一个迭代)。

我建议您从一个好的教程中了解Java的基础知识,例如https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html