比较两个字符串的调用方法 | 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();
我有两个 类,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();