2013-07-04 2 views
0

Это импортирует текст из файла и создает массив объектов типа врагИспользуйте массив объектов в другом классе

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 
+1

Вы должны объявить 'FOE недруги [] = новый враг [100],' вне вашего класса 'main'. – sarwar026

+0

@CarlosMiguelFernando прочитал ссылку, упомянутую в моем ответе, лучший способ кодирования, вам это нужно. и попробуйте использовать модификаторы как с полями, так и с методами. –

ответ

-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); 
     } 
} 
+0

Большое спасибо, это решило мою проблему. Я добавил «статический», как этот «статические враги врагов [] = новый враг [100];» –

+0

-1 Как это работает? Является ли противник публичным, статическим? Это по умолчанию? –

+0

@CarlosMiguelFernando Да, вы должны были добавить это, так что ответ неправильный –

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

недругов локальное поле, которое не имеет существования вне основного method.so вы можите refere врагов за пределами основного метода.
Чтобы получить доступ к противникам снаружи, вы должны сделать противников глобальной переменной в классе cmdquest и должны предоставить модификатор в зависимости от вашего требования.

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

В случае, если вы хотите получить прямой доступ к объекту недруги без создания cmdquest объекта затем сделать недруги объект как статические

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

Это решение вашей проблемы. Но это еще не конец, прежде чем кодировать в java, вы должны следовать некоторым рекомендациям или рекомендациям, чтобы вы могли писать лучший код и меньше ошибок. Так что читать эту artical:
http://viralpatel.net/blogs/most-useful-java-best-practice-quotes-java-developers/

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"); 
    } 
Смежные вопросы