Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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_Java_String_Methods_Compare_User Input - Fatal编程技术网

调用方法比较两个字符串| Java

调用方法比较两个字符串| Java,java,string,methods,compare,user-input,Java,String,Methods,Compare,User Input,我有两个类,StringCompare和StringCompareTest StringCompare创建2个字符串,这些字符串将由StringCompareTest中的用户输入分配,并具有一个比较字符串的方法 在StringCompareTest中,它不会调用方法-“不能从静态上下文引用非静态方法compareStrings()” 有人能帮我调用这个方法并允许我的程序运行吗 先谢谢你 public class StringCompare { // Create two strings

我有两个类,StringCompare和StringCompareTest

StringCompare创建2个字符串,这些字符串将由StringCompareTest中的用户输入分配,并具有一个比较字符串的方法

在StringCompareTest中,它不会调用方法-“不能从静态上下文引用非静态方法compareStrings()”

有人能帮我调用这个方法并允许我的程序运行吗

先谢谢你

public class StringCompare {

    // Create two strings 
    String s1 = "";
    String s2 = "";

    // Create method to compare them, to be called in StringCompareTest
    void compareStrings() {
        if (s1.equals(s2)) {
            System.out.println("The strings are equal!");
        } else {
            System.out.println("The strings are not equal!");
        }
    }


}
`


或者使compareString的方法静态,在这种情况下,您应该将两个字符串作为参数传递

public static void compareStrings(s1, s2)
…或创建StringCompare的实例,设置s1和s2的值,并调用实例的方法

StringCompare sc = new StringCompare();
sc.s1 = string1;
sc.s2 = string2;
sc.compareString()

不管怎样,我看不出有任何需要让StringCompareTest扩展StringCompare

您正在从静态方法(
main(String[])
)调用非静态方法
compareStrings()
)。无法执行此操作,因为调用方未与类的实例关联,而正在调用的方法是

也就是说,您需要创建
StringCompare
的实例,然后调用该方法。例如:

StringCompare scmp = new StringCompare(s1, s2);
StringCompare.compareStrings();

请注意,在代码中,
main
方法中的变量s1和s2在
StringCompare
类中不相同。您需要创建一个包含两个字符串参数的构造函数。

您不能调用非静态方法并将非静态实例变量访问到静态方法中。如果您希望在静态方法中访问这些变量,则在
static void main()
方法中,您应该通过两种方式来实现

//Try this:

public static void main(String[] args) {

...
StringCompare compare = new StringCompare();
compare.compareStrings(s1,s2);

}

public void compareStrings(String s1, String s2) {


        if (s1.equals(s2)) {
            System.out.println("The strings are equal!");
        } else {
            System.out.println("The strings are not equal!");
        }
    }
Way-1

在类
StringCompare
中将实例变量s1和s2声明为静态,并将方法
void compareStrings()
声明为静态

static String s1 = "";
static String s2 = "";

static void compareStrings() {
        if (s1.equals(s2)) {
            System.out.println("The strings are equal!");
        } else {
            System.out.println("The strings are not equal!");
        }
    }
Way-2

通过创建
StringCompare
类的对象,将方法
void compareStrings()
调用到
StringCompareTest
类中

StringCompare sc = new StringCompare();   
sc.compareStrings();
StringCompare sc = new StringCompare();   
sc.compareStrings();