java类没有通信?

jem*_*990 2 java parameters class

我正在为一个类开发一个非常简单的文本RPG类型的游戏.我觉得我一切都很好,但是当我运行以下类时,我遇到编译器错误.

这是我的"房间"课程:

import java.io.*;
import java.util.*;

public class Room {

    public static int size;

    public static void Room(int n) {
        size = n;
    }

    public static void showSize() {
        System.out.println(size);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是调用它的类:

import java.io.*;
import java.util.*;

public class Dungeon {
    public static void main(String [] args) {
        int mySize = 10;
        Room a = new Room(mySize);

        a.showSize();
    }
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我在Room()构造函数中没有任何参数的情况下运行它,那很好,但是当我尝试传入一个大小(在变量中或使用int显式)时,我得到:

Dungeon.java:8: cannot find symbol
symbol  : constructor Room(int)
location: class Room
        Room a = new Room(mySize);
                 ^
1 error
Run Code Online (Sandbox Code Playgroud)

kos*_*osa 5

public static void Room(int n){
    size = n;
}
Run Code Online (Sandbox Code Playgroud)

不是构造函数,它是静态方法.所以,当你尝试

Room a = new Room(mySize);
Run Code Online (Sandbox Code Playgroud)

Java使用参数查找构造函数并显示编译时错误.

将其更改为:

public Room(int n){
        size = n;
    }
Run Code Online (Sandbox Code Playgroud)

了解更多关于构造函数在这里.


Jon*_*eet 5

您正在尝试调用Room构造函数,但您尚未定义任何构造函数.你有这个:

public static void Room(int n){
    size = n;
}
Run Code Online (Sandbox Code Playgroud)

...但这只是一个静态void方法,而不是构造函数 - 它设置了一个静态字段.我怀疑你真的希望你的Room课看起来像这样:

public class Room {
    private final int size;

    public Room(int size) {
        this.size = size;
    }

    public void showSize() {
        System.out.println(size);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我已经制作了size两个privatefinal.如果你真的希望你的房间能够在施工后改变尺寸,那么你可以移除它final,但我强烈建议你保留田地private.