2015-03-25 3 views
-1

У меня есть два класса: StringCompare и StringCompareTest.Метод вызова для сравнения двух строк | Java

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

} 

} 

ответ

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

Либо сделать метод в CompareString статику, в этом случае вы должны передать две струны в качестве параметров ...

public static void compareStrings(s1, s2) 

... или создать экземпляр StringCompare, задайте значения s1 и s2 и вызовите метод экземпляра

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

В любом случае, я не вижу необходимости, чтобы StringCompareTest расширял StringCompare.

0

Вы вызываете нестатический метод compareStrings(), из статического метода (main(String[])). Это невозможно сделать, потому что вызывающий объект не связан с экземпляром класса, а вызываемый метод - это!

То есть вам нужно создать экземпляр StringCompare, а затем вызвать метод. НАПРИМЕР,

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

Обратите внимание, что в коде переменные S1 и S2 в методе main не то же самое в StringCompare классе. Вам нужно создать конструктор, который принимает два строковых аргумента.

0

Вы не можете звонить нестатический метод и доступа нестатический переменную экземпляра в статическом method.if вы хотите хотите получить доступ к этим в вас статический метод означает, что в static void main() методе вы должны сделать это двумя способами

Путь-1

Объявляет переменные экземпляра s1 и s2 как статические, а также метод void compareStrings() как статические в классе StringCompare.

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

Вызов метода void compareStrings() в StringCompareTest класса с созданием объекта StringCompare класса.

StringCompare sc = new StringCompare(); 
sc.compareStrings(); 
Смежные вопросы