【问题标题】:Beginner java constructor+loop+table ArrayIndexOutOfBounds初学java构造函数+循环+表ArrayIndexOutOfBounds
【发布时间】:2014-05-19 13:08:18
【问题描述】:

这里是初学者,找不到我的问题的答案。首先,这是代码。

public class Worker{

    String name = "default";
    String surname = "default";
    int age = 0;

    public Worker(){ }

    public Worker(String inName, String inSurname, int inAge){
        name = inName;
        surname = inSurname;
        age = inAge;
    }

    public Worker(Worker worker){
        name = worker.name;
        surname = worker.surname;
        age = worker.age;
    }
}   

还有:

public class Company{   

    public static void main(String[] args){

        int n = 2;
        Worker[] workers = new Worker[n];
        String[] names = {"John", "Kate"};
        String[] surnames = {"Doe", "McDonald"};
        int[] ages = {25, 31};

        for(int i=0; i<n; i++){         
            workers[i] = new Worker(names[i], surnames[i], ages[i]);
        }       
            for(Worker p: workers){
            System.out.printf("%s, %s, %d \n",p.name,p.surname,p.age);
        }
    }
}

我想要做的是创建 3 个“工人”对象(假设用户选择了“n”值),同时只有两组数据(姓名、姓氏和年龄)。如果“n”值大于 names.length(),我希望使用构造函数“public Worker(){}”创建新工作者。

我该怎么做?我尝试了几个想法,但所有想法都给了我 ArrayIndexOutOfBoundsException。

【问题讨论】:

  • 您的代码运行良好。
  • 你在哪一行得到错误?
  • 它工作正常,但如果我将“n”值更改为“3”,它会给我 ArrayIndexOutOfBounds 异常。

标签: java constructor indexing indexoutofboundsexception


【解决方案1】:

如果“n”值大于 names.length 我想要新的 使用构造函数“public Worker(){}”创建的worker。

这样的?

for(int i=0; i<names.length; i++){         
    workers[i] = new Worker(names[i], surnames[i], ages[i]);
}
if (names.length < n) {
    for(int i = names.length; i<n; i++){
        workers[i] = new Worker();
    }
}

【讨论】:

  • 是的,两个循环都可以用更短的代码编写,你的建议是个好建议,但我认为现在的编写方式对于初学者来说最容易理解。
  • 这正是我想要的,谢谢!除了我必须将“names.length()”的所有实例更改为“names.length”
【解决方案2】:
String[] names    = {"John", "Kate", "one_name_to_much"};
String[] surnames = {"Doe", "McDonald"};
int[]    ages     = {25, 31};

Worker[] workers  = new Worker[Math.max(Math.max(names.length, surnames.length), ages.length)];

这将检查姓名、姓氏或年龄是否具有最多的索引,然后使用它来初始化您的 Worker 数组。

【讨论】:

  • 问题没有错..!!为什么要“改变”实现风格……??
  • @GokulNath 请阅读问题的倒数第二句。
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多