0

很抱歉这个基本问题,但我正在学习,是编程新手。我正在尝试调用另一个类中的方法,但是如果不为Cypher类的构造函数传递所需的值,我就无法调用。Cypher每次我在Menu类中使用方法并想要调用类的方法时,我是否真的需要一个新的类实例,Cypher或者如何重写以避免下面的情况。

public class Runner {
    private static  Cypher c;
    public static void main(String[] args)  {

        Menu m = new Menu();
        m.displayMenu();
        
        //c=new Cypher(3,2);// wont work unless i add this line
        c.displayCypher("text");

        
    }
}

public class Cypher {
    private int keyTotalRows;
    private int keyStartRow;
    
    
    public Cypher(int key, int offset) throws Exception {
        
        
    }

    
    public void displayCypher(String text) {
        
        System.out.println("Plain text:" + text);
        System.out.println("Key: Number of Rows:" + keyTotalRows + "\n" + "Key Start Row: " + keyStartRow);
        
    }
}

public class Menu {
            private Scanner s;
                private void enterKey() {
            s = new Scanner(System.in);
            System.out.println("Enter  key >");

            int key = Integer.parseInt(s.next());
            
            System.out.println("Enter offset >");

            int offset = Integer.parseInt(s.next());
            
            System.out.println(" Key:" + key + "\n" + " Offset:" + offset);

        }


        public static void displayMenu()  {
            System.out.println("Menu"); 
}
4

3 回答 3

2

一些事情:。您的方法是私有的,这意味着您不能在课堂外调用它们。改变它,你将能够创建你的对象并调用它们。

Menu menu=new Menu() ;
menu.otherMethod();

但是,当该方法调用为 null 的 c 时,您将得到一个 null 异常。

您应该对其进行测试,然后调用对象 c 内部方法

If (this.c! =null)
{c.displayOtherCypherType("" ) ;}
else
{//do something here}

为了能够从类外部发送 Cypher,请使用接收 Cypher 对象并将其分配给 c 的构造函数,或者具有接收并分配它的公共 set 方法

public setCypher(Cypher cypher) 
{
(this.c=cypher) ;
}

现在如果你想调用 Cypher 方法而不实例化它,你可以在其中创建一个静态方法并调用 Tha 方法。请注意,它应该是公开的,否则您将无法调用它

于 2020-07-31T03:05:49.900 回答
1

你在这里声明了一个 Cypher 类型的静态变量c。所以你不能使用c没有对象声明的变量访问 Cypher 类方法。但是您可以从任何类调用该c变量,因为它是一个静态变量。但是您的 Cypher 类没有任何静态方法,因此您不能在没有对象初始化的情况下调用这些方法。所以你必须声明一个静态方法或者需要为 Cypher 类的访问方法创建一个对象。

但是如果你用初始化声明 Cypher 类型的静态变量。然后您可以从任何类调用 c ,也可以使用c变量引用调用 Chyper 类方法。像:

// Declare this on Runner class
public static Cypher c = new Cypher();

// And then call from any class like 
Runner.c.yourMethod();

快乐编码。

于 2020-07-31T04:16:50.603 回答
0

如果您不想创建实例,可以将方法设为静态。

像这样的东西:

public static void displayCypher(String text) {
        System.out.println("Plain text:" + text);
        System.out.println("Key: Number of Rows:" + keyTotalRows + "\n" + "Key Start Row: " + keyStartRow);
}

然后你可以在另一个类中调用这个函数,比如

Cypher.displayCypher()
于 2020-07-31T04:51:14.853 回答