0

这会从文件中导入文本并创建一个foe类型的对象数组

class cmdquest{

    public static void main(String args[]) throws Exception{

            //Importing foes.txt to create objects of foes
            java.io.File file = new java.io.File("foes.txt");
            Scanner imp = new Scanner(file);  
            foe foes[] = new foe[100];
            for(int i =0; i<3; i++){
                foes[i]=foe.leDados(imp);
            }
}

在另一个班级我有这个,但它不起作用

static void db(){
    for(int a=0; a<3; a++){
        System.out.print(cmdquest.foes[a].name + "\t");
    }
    System.out.print("*Press Enter to go back to the main menu*");
        Scanner kb = new Scanner(System.in);
        kb.nextLine();

        Menu.show_menu();
}

这是我的班级敌人,声明了所有内容,包括名称:

class foe{
    String name;
    int hp;
    int str;
    int def;

    foe(String n, int h, int s, int d) {
    name = n;
    hp = h;
    str = s;
    def= d;
    }

    static foe leDados(Scanner imp){
            String foe_name = imp.next();
            int foe_hp = imp.nextInt();
            int foe_str = imp.nextInt();
            int foe_def = imp.nextInt();
        return new foe(foe_name, foe_hp, foe_str, foe_def);
    }
}

这是我在编译时遇到的错误:

   cmdquest.java:186: error: cannot find symbol
                            System.out.print(cmdquest.foes[a].name + "\t");
                                                             ^
      symbol:   variable foes
      location: class cmdquest
    1 error
4

3 回答 3

1

在您的代码中,问题是您试图访问该类中不存在的对象

System.out.print(cmdquest.foes[a].name + "\t");

这一行说 cmdquest 有一个公共数组字段名称作为敌人。但是您的班级中没有字段。

在你的课上

class cmdquest{

    public static void main(String args[]) throws Exception{

            //Importing foes.txt to create objects of foes
            java.io.File file = new java.io.File("foes.txt");
            Scanner imp = new Scanner(file);  
            foe foes[] = new foe[100];
            for(int i =0; i<3; i++){
                foes[i]=foe.leDados(imp);
            }
    }
}

foes 是一个在 main 方法之外不存在的本地字段。因此您不能在 main 方法之外引用 foes。
要从外部访问敌人,您必须在 cmdquest 类中将 foes 作为全局变量,并且必须根据您的要求提供修饰符。

public class cmdquest{

    public foe foes[] = new foe[100];

    public static void main(String args[]) throws Exception{

            //Importing foes.txt to create objects of foes
            java.io.File file = new java.io.File("foes.txt");
            Scanner imp = new Scanner(file);  
            for(int i =0; i<3; i++){
                foes[i]=foe.leDados(imp);
            }
   }
}

如果您想直接访问 foes 对象而不创建 cmdquest 对象,则将 foes 对象设为静态

 public static foe foes[] = new foe[100];

这是您的问题的解决方案。但这并不是在 Java 中编码之前的结束,您必须遵循一些指南或最佳实践,以便您可以编写更好的代码和更少的错误。因此,请阅读这篇文章:http:
//viralpatel.net/blogs/most-useful-java-best-practice-quotes-java-developers/

于 2013-07-04T03:38:10.007 回答
0

要使代码正常工作,您需要将敌人作为静态属性存储在cmdquest

class cmdquest{

    public static foes foes[];

    public static void main(String args[]) throws Exception{

            //Importing foes.txt to create objects of foes
            java.io.File file = new java.io.File("foes.txt");
            Scanner imp = new Scanner(file);  
            for(int i =0; i<3; i++){
                foes[i]=foe.leDados(imp);
   }
}

但是拥有可变静态属性是不好的做法,因为它们本质上是全局变量。你应该只有一个返回的方法foe[]

class foe{
    String name;
    int hp;
    int str;
    int def;

    foe(String n, int h, int s, int d) {
      name = n;
      hp = h;
      str = s;
      def= d;
    }

    private static foe leDados(Scanner imp){
            String foe_name = imp.next();
            int foe_hp = imp.nextInt();
            int foe_str = imp.nextInt();
            int foe_def = imp.nextInt();
        return new foe(foe_name, foe_hp, foe_str, foe_def);
    }

    public static foe[] getFoes() {

        java.io.File file = new java.io.File("foes.txt");
        Scanner imp = new Scanner(file);  

        foe foes[] = new foe[100];
        for(int i =0; i<3; i++){
            foes[i] = foe.leDados(imp);
        }
        return foes;
    }
}

并称它为

static void db(){
    foes[] foes = foe.getFoes();
    for(int a=0; a<3; a++){
        System.out.print(cmdquest.foes[a].name + "\t");
    }
于 2013-07-04T03:43:38.687 回答
-2

这应该有效。

class cmdquest{
    public foe foes[] = new foe[100];

    public static void main(String args[]) throws Exception{

        //Importing foes.txt to create objects of foes
        java.io.File file = new java.io.File("foes.txt");
        Scanner imp = new Scanner(file);  

        for(int i =0; i<3; i++){
            foes[i]=foe.leDados(imp);
        }
}
于 2013-07-04T03:27:47.460 回答