将数组传递给构造函数

时间:2011-10-09 00:16:07

标签: java arrays constructor

我必须为一个赋值写两个文件,一个客户端文件将从用户接收两组数据。第一组是申请人ID(int)的列表,第二组是y或n(char)。需要将数据集输入两个数组。 然后我必须创建一个类文件,它将接收这两个数组到一个构造函数中,然后运行一些特定的方法来验证答案是否正确,有多少答案正确,最后哪些候选人得到了最正确的答案。

我只有两个问题:

1st - 将输入第二个数组的第一行数据将是答案键。是否可以在申请人ID的数组的开头添加0,以便两个数组匹配(ID#{1}回答{1}等)?

第二 - 从我的客户端文件中调用我的类文件,我是否在两者中都声明了数组? 即:

客户档案:

int[] id = new int[];
char[] answer = new char[];
ValidateMark importClerk = new ValidateMark(id, answer);

类构造函数:

public ValidateMark(int number[], char marks[])

提前致谢

3 个答案:

答案 0 :(得分:1)

我将假设数据结构是必需的,并指定为作业的一部分,除非另有要求,否则不要使用其他任何输入。

第一个问题:

是的,你可以,但不是以你的想法。一旦声明,数组占用静态数量的内存,并具有静态数量的元素。因此,您不能将项目“插入”到已声明和分配的数组的开头。这是一种动态集合类型的行为,例如List。

如果您无法控制数组的声明/分配,那么您唯一的选择是将数组的内容复制到包含空0索引的新内容。

int[] array = { 0, 1, 2, 3 };
int newArray = new int[array.length + 1];

newArray[0] = 0;
for(int i = 1; i < newArray.length; i++)
{
   newArray[i] = array[i - 1];
}

另一方面,如果你是制作这个初始数组的那个,那么只需将大小+1设置得更大并在开头添加一个零,问题就解决了。

第二个问题:

数组是否应该在“客户端文件”中声明(无论是什么),这取决于你。

答案 1 :(得分:0)

1)如果你控制数组的定义,你可以跳过元素并在任何你想要的地方开始。

2)int[] id = new int[]; char[] answer[] = new char[];无效。

答案 2 :(得分:0)

看起来你真正想要的是Map<Integer,Char>。这将允许您明确地将标识符与答案相关联。

如果代码的某些部分已经有int[] idchar[] answer,则可以轻松将其转换为Map

Map<Integer,Char> map = new HashMap<Integer,Char>();
for (int i = 0; i < id.length; id++) {
    map.put(id[i], answer[i]);
}

然后,您可以拨打map.get(id)之类的电话来检索该问题的答案。