这会从文件中导入文本并创建敌人
类型的对象数组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
答案 0 :(得分: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);
}
}
}
敌人是一个在主要方法之外没有存在的局部场。所以你不能在主方法之外引用敌人。
要从外部访问敌人,你必须将敌人作为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编码之前的结束,你必须遵循一些指南或最佳实践,以便你可以编写更好的代码和更少的errorpron。因此,阅读这篇文章:
http://viralpatel.net/blogs/most-useful-java-best-practice-quotes-java-developers/
答案 1 :(得分: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");
}
答案 2 :(得分:-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);
}
}