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

Calling Method to Compare Two Strings | Java

我有两个 类,StringCompare 和 StringCompareTest。

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

在 StringCompareTest 中,它不会调用方法 - "non-static method compareStrings() cannot be referenced from a static context"

谁能帮我调用这个方法让我的程序运行?

提前致谢。

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!");
        }
    }


}

`

import java.util.Scanner;

public class StringCompareTest {

public static void main(String[] args) {

    StringCompare stringCompare = new StringCompare ();

    // Create Scanner object to get input
    Scanner keyboard = new Scanner(System.in);

    // Get strings from user & assign values to strings
    System.out.println("Enter your first string: ");
    String s1 = keyboard.nextLine();

    System.out.println("Enter your second string: ");
    String s2 = keyboard.nextLine();

    // Call compareStrings
    compareStrings();

}

}

要么将 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()。这无法完成,因为调用者未与 class 的实例相关联,而被调用的方法是!

即需要创建StringCompare的实例,然后调用该方法。例如,

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

请注意,在您的代码中,main 方法中的变量 s1 和 s2 在 StringCompare class 中是不同的。您需要制作一个接受两个字符串参数的构造函数。

//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!");
        }
    }

您不能调用非静态方法并将非静态实例变量访问到静态 method.If 您想要在静态方法中访问这些意味着在 static void main() 方法中您应该这样做有两种方式

方式一

在 class 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!");
        }
    }

方式二

通过创建 StringCompare class.

的对象将方法 void compareStrings() 调用到 StringCompareTest class
StringCompare sc = new StringCompare();   
sc.compareStrings();