在尝试理解此代码时需要一些帮助

时间:2013-08-31 13:54:31

标签: java

我被要求:编写一个函数boolean succeeds(char a, char b, String s),它接受​​一个字符串s并返回true 如果字符b的每次出现总是由字符a继承,否则为false。

我遇到了这个:

while (!s.equals("")) {
    char c = s.charAt(0);  // record first char
    s = s.substring(1);    // cut off first char


    // if "first char is 'b' and next is
    // not 'a'", we can return false
    if (c == b && (s.equals("") || s.charAt(0) != a))
        return false;                
}

return true;
但是我不能理解我的头脑呢? s.equals""是什么意思?

4 个答案:

答案 0 :(得分:1)

第一次出现:

检查s是否不是空白String

您可以在!运算符here和一个`equals()'here上找到相关信息。

答案 1 :(得分:0)

while (!s.equals("")) {

这将只重复以下代码,直到s为空字符串""。由于每次迭代都会切断一个字符,因此这将不断删除字符,直到不再有字符为止。

(s.equals("") || s.charAt(0) != a)

s.equals("")用于检查s是否为空字符串。这是必需的,因为如果 为空字符串,则s.charAt将失败。

||运算符是短路的,这意味着如果第一个表达式为真,则第二个表达式不会被评估。

答案 2 :(得分:0)

要理解String使用.equals()而不是==的原因,您需要了解Java如何存储数据。在Java中,您只能使用==比较两个基元(int,float,double)或两个指针。字符串不是基本类型。如果存储int(或其他基本类型),它将存储数据本身。如果存储对象,它将存储指向对象实际位置的指针。如果你创建一个String对象

String a = new String( "I am a String!" );

它在内存中的其他地方返回指向该字符串的指针。现在我们创建另一个具有完全相同文本的字符串:

String b = new String( "I am a String!" );

它返回指向不同位置的指针,因为它是不同的对象(注意new关键字)。如果您要比较a == b,它将返回false。为什么?因为ab不是同一个String对象。它的指针是不同的。如果你愿意的话

String c = b;

c将指向与b相同的String对象。如果你要比较它们(b == c),它将返回true。

为了能够比较它们的内容,String对象具有.equals()方法。当内容a等于b中的a.equals( b )时,它会返回true。


回到这个问题。 s.equals("")将创建一个没有内容的新String。对于上面的推理,如果检查s == ""它将始终返回false。

答案 3 :(得分:0)

在java中,如果看到引号中没有任何内容,则表示该对象的值为空。

因此,只有在字符串中有一些值(字符)时,程序才会运行。

!=表示不等于。 !意思不是。

当有人没有输入值时,这会停止运行。

所以它说

虽然String S的值不等于程序将运行的任何内容。