Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在toString()方法之后使用equals()方法时出现问题_Java_String_Equals - Fatal编程技术网

Java 在toString()方法之后使用equals()方法时出现问题

Java 在toString()方法之后使用equals()方法时出现问题,java,string,equals,Java,String,Equals,当我尝试将两个字符串作为函数的输入并检查它们是否是字谜时,我得到了错误的输出。我已经编写了以下代码 class Solution { public boolean isAnagram(String s, String t) { char sArray[] = s.toCharArray(); char tArray[] = t.toCharArray(); Arrays.sort(sArray); Arrays.so

当我尝试将两个字符串作为函数的输入并检查它们是否是字谜时,我得到了错误的输出。我已经编写了以下代码

    class Solution {
    public boolean isAnagram(String s, String t) {
        char sArray[] = s.toCharArray();
        char tArray[] = t.toCharArray();
        Arrays.sort(sArray);
        Arrays.sort(tArray);
        s = sArray.toString();
        t = tArray.toString();
        return s.equals(t);
        
    }
}
我的示例输入是
s=“anagram”和t=“nagaram”
。选中时,两个字符数组打印相同的值,即

sArray is: 
aaagmnr
tArray is: 
aaagmnr

但我的输出似乎是错误的。有人能告诉我为什么在
toString()
之后使用
equals()
时会得到这样的结果吗?

由于数组不重写
toString()
对象
实现,您对
字符串的转换是不正确的

也就是说,没有理由将数组转换为
String
,以便对它们进行比较。您可以直接使用
数组进行比较。equals
如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则返回true

char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray,tArray);

您对
字符串的转换不正确,因为数组不重写
对象
实现
toString()

也就是说,没有理由将数组转换为
String
,以便对它们进行比较。您可以直接使用
数组进行比较。equals
如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则返回true

char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray,tArray);

下面的代码行不会将字符数组转换为字符串:

s = sArray.toString();
t = tArray.toString();
这仅将地址转换为字符串,为了将数组转换为字符串,您应该使用:Arrays.toString(arrName)

现在代码将如下所示:

public static boolean isAnagram(String s, String t) {
    char sArray[] = s.toCharArray();
    char tArray[] = t.toCharArray();
    Arrays.sort(sArray);
    Arrays.sort(tArray);
    s = Arrays.toString(sArray);
    t = Arrays.toString(tArray);
    return s.equals(t);  
}
return str.equals(str2);

下面的代码行不会将字符数组转换为字符串:

s = sArray.toString();
t = tArray.toString();
这仅将地址转换为字符串,为了将数组转换为字符串,您应该使用:Arrays.toString(arrName)

现在代码将如下所示:

public static boolean isAnagram(String s, String t) {
    char sArray[] = s.toCharArray();
    char tArray[] = t.toCharArray();
    Arrays.sort(sArray);
    Arrays.sort(tArray);
    s = Arrays.toString(sArray);
    t = Arrays.toString(tArray);
    return s.equals(t);  
}
return str.equals(str2);
这里,
toString()
在从对象类继承的名为
toString()
方法的字符数组上:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因此,使用
String.valueOf
再次将字符数组转换为字符串

s = String.valueOf(sArray);
t = String.valueOf(tArray);
由于只需比较,因此可以使用
Arrays.equals()

这里,
toString()
在从对象类继承的名为
toString()
方法的字符数组上:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因此,使用
String.valueOf
再次将字符数组转换为字符串

s = String.valueOf(sArray);
t = String.valueOf(tArray);
由于只需比较,因此可以使用
Arrays.equals()


您正在比较中sArray和tArray的内存地址

    s = sArray.toString();
    t = tArray.toString();
我建议您循环数组中的值并将其存储在字符串中

    for( int i = 0; i < sArray.length; i++ )
        str += sArray[i];

    for( int i = 0; i < tArray.length; i++ )
        str2 += tArray[i];

您正在比较中sArray和tArray的内存地址

    s = sArray.toString();
    t = tArray.toString();
我建议您循环数组中的值并将其存储在字符串中

    for( int i = 0; i < sArray.length; i++ )
        str += sArray[i];

    for( int i = 0; i < tArray.length; i++ )
        str2 += tArray[i];

您可以使用
public String(char[]value)
char[]
中创建
字符串

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        System.out.println(isAnagram("anagram", "nagaram"));
    }

    public static boolean isAnagram(String s, String t) {
        char sArray[] = s.toCharArray();
        char tArray[] = t.toCharArray();
        Arrays.sort(sArray);
        Arrays.sort(tArray);
        s = new String(sArray);// Create String out of sArray
        t = new String(tArray);// Create String out of tArray
        return s.equals(t);
    }
}
输出:

true
或者,您可以使用从
char[]
创建
字符串。还有更多的解决方案(例如,直接使用比较字符数组,将一个数组的每个元素与另一个数组的每个元素进行比较等),我建议您尽可能多地尝试,以便学习

你的方法出了什么问题?
sArray.toString()
tArray.toString()
返回可以通过打印或调试代码找到的不同字符串。这种差异背后的原因是
sArray
tArray
的散列码不同。检查以了解如何使用调试器来避免此类情况。

您可以使用
公共字符串(char[]值)
字符[]
中创建
字符串

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        System.out.println(isAnagram("anagram", "nagaram"));
    }

    public static boolean isAnagram(String s, String t) {
        char sArray[] = s.toCharArray();
        char tArray[] = t.toCharArray();
        Arrays.sort(sArray);
        Arrays.sort(tArray);
        s = new String(sArray);// Create String out of sArray
        t = new String(tArray);// Create String out of tArray
        return s.equals(t);
    }
}
输出:

true
或者,您可以使用从
char[]
创建
字符串。还有更多的解决方案(例如,直接使用比较字符数组,将一个数组的每个元素与另一个数组的每个元素进行比较等),我建议您尽可能多地尝试,以便学习

你的方法出了什么问题?
sArray.toString()
tArray.toString()
返回可以通过打印或调试代码找到的不同字符串。这种差异背后的原因是
sArray
tArray
的散列码不同。检查以了解如何使用调试器来避免这种情况。

Arrays.toString将返回[a,a,a,g,m,n,r]而不是aaagmnr。实际上,它将返回[a,a,a,g,m,n,r],但在比较字谜时,它不会影响逻辑。为了将数组转换为字符串,这实际上表示其他内容,这并不意味着字符数组的字符串表示形式为[并以,(逗号)分隔。不过,您只需使用
新字符串(数组)
,即可获得简单的表示形式,无需额外的逗号或括号。此外,继承的
toString()
数组的方法生成一个类名,后跟@和对象哈希代码。这与地址无关。数组。toString将返回[a,a,a,g,m,n,r]而不是aaagmnr实际是,它将返回[a,a,a,g,m,n,r]但是,在比较字谜的情况下,它不会影响逻辑。为了将数组转换为字符串,这实际上表示其他内容,并不意味着字符数组的字符串表示形式为[并用逗号分隔],但是,您可以简单地使用
新字符串(数组)
,以获得简单的表示形式,无需额外的逗号或括号。此外,继承的数组的
toString()
方法生成一个类名,后跟@和对象哈希代码。这与