Java 将数组传递给构造函数

Java 将数组传递给构造函数,java,arrays,constructor,Java,Arrays,Constructor,我必须为一个任务编写两个文件,一个客户端文件将接收来自用户的两组数据。第一组是申请人ID的列表(int),第二组是y或n(char)。数据集需要输入到两个数组中。 然后,我必须创建一个类文件,将这两个数组接收到一个构造函数中,然后通过一些特定的方法来验证答案是否正确,有多少答案正确,以及最终哪些候选者得到了最正确的答案 我只有两个问题: 第一行-将输入第二个数组的第一行数据将是应答键。是否可以将0添加到申请人ID数组的开头,以便两个数组匹配(ID{1}以回答{1}等) 第二个-通过从我的客户机文

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

我只有两个问题:

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

第二个-通过从我的客户机文件调用我的类文件,我是否在这两个文件中声明数组? i、 e:

客户端文件:

int[] id = new int[];
char[] answer = new char[];
ValidateMark importClerk = new ValidateMark(id, answer);
类构造函数:

public ValidateMark(int number[], char marks[])
提前感谢

1)如果您控制数组的定义,您可以跳过元素并从任意位置开始

2)
int[]id=newint[];字符[]答案[]=新字符[]无效。

1)如果控制数组的定义,则可以跳过元素并从任意位置开始


2)
int[]id=newint[];字符[]答案[]=新字符[]无效。

看起来您真正要找的是一张
地图。这将允许您显式地将标识符与答案关联起来

如果在代码的某些部分已经有
int[]id
char[]answer
,则可以轻松地将其转换为
映射

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

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

看起来您真正想要的是
地图。这将允许您显式地将标识符与答案关联起来

如果在代码的某些部分已经有
int[]id
char[]answer
,则可以轻松地将其转换为
映射

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

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

我将假设数据结构是必需的,并且指定为作业的一部分,并且除非另有要求,否则不会提供任何关于备用结构的输入

第一个问题:

是的,你可以,但不是以你的思维方式。数组一经声明,就会以静态的元素数占用静态内存量。因此,不能在已声明和分配的数组开头“插入”项。这是一种动态集合类型的行为,例如列表

如果无法控制数组的声明/分配,那么唯一的选择就是将数组的内容复制到包含空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];
}
int[]数组={0,1,2,3};
int newArray=newint[array.length+1];
newArray[0]=0;
for(int i=1;i
另一方面,如果您是创建这个初始数组的人,那么只需将大小+1变大,并在开始时添加一个零,问题就解决了

第二个问题:


是否应该在“客户机文件”(不管是什么)中声明数组实际上取决于您。

我将假设数据结构是必需的,并且指定为赋值的一部分,除非另有要求,否则不会提供任何关于备用结构的输入

第一个问题:

是的,你可以,但不是以你的思维方式。数组一经声明,就会以静态的元素数占用静态内存量。因此,不能在已声明和分配的数组开头“插入”项。这是一种动态集合类型的行为,例如列表

如果无法控制数组的声明/分配,那么唯一的选择就是将数组的内容复制到包含空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];
}
int[]数组={0,1,2,3};
int newArray=newint[array.length+1];
newArray[0]=0;
for(int i=1;i
另一方面,如果您是创建这个初始数组的人,那么只需将大小+1变大,并在开始时添加一个零,问题就解决了

第二个问题:


数组是否应该在“客户机文件”(不管是什么)中声明,实际上取决于您。

感谢您的回复。所以我可以从[1]位置开始将数据导入我的数组?我的[0]默认值是0吗?我想这取决于你所说的“导入”是什么意思。(我不知道你为什么要这么做。)谢谢丹尼尔。抱歉,如果我的措辞不清楚,请从学习如何编码开始。谢谢您的回复。所以我可以从[1]位置开始将数据导入我的数组?我的[0]默认值是0吗?我想这取决于你所说的“导入”是什么意思。(我不知道你为什么要这么做。)谢谢丹尼尔。抱歉,如果我的措辞不清楚,请从学习如何编码开始。谢谢您的输入。您关于创建新阵列的建议正是我想要的。我只是不太知道如何利用它。我以两种方式测试我的程序,一种是我声明并初始化程序本身中的数组,另一种是程序向用户请求输入。由于当用户输入时,程序永远不会知道数组的实际大小,因此我将我的构造函数设置为接收数组的as
public ValidateMark(int…number,char…answer)
。这就是畜栏吗