【问题标题】:Calling Method to Compare Two Strings | Java调用方法比较两个字符串 |爪哇
【发布时间】:2015-03-25 17:45:05
【问题描述】:

我有两个类,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!");
        }
    }


}

`

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();

}

}

【问题讨论】:

    标签: java string methods compare user-input


    【解决方案1】:
    //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!");
            }
        }
    

    【讨论】:

      【解决方案2】:

      要么将 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。

      【讨论】:

        【解决方案3】:

        您正在从静态方法 (main(String[])) 调用非静态方法 compareStrings()。这是无法做到的,因为调用者没有与类的实例相关联,而被调用的方法却是!

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          方式 2

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

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

          【讨论】:

            猜你喜欢
            • 2011-07-23
            • 2011-01-23
            • 1970-01-01
            • 2011-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-08
            相关资源
            最近更新 更多