我有两个类,StringCompare和StringCompareTest。
StringCompare创建2个字符串,这些字符串将由StringCompareTest中的用户输入分配,并具有一个比较这些字符串的方法。
在StringCompareTest中,它不会调用方法-"非静态方法compareString()不能从静态上下文中引用"
有人能帮我调用该方法并允许我的程序运行吗?
提前谢谢。
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();
}
}
//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!");
}
}
要么使compareString的方法为静态,在这种情况下,您应该将两个String作为参数传递。。。
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()
方法中你应该通过两种方法来实现
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();