передача массивов конструктору - PullRequest
1 голос
/ 09 октября 2011

Мне нужно написать два файла для назначения, файл клиента, который получит два набора данных от пользователя.Первый набор представляет собой список идентификаторов заявителя (int), а второй набор - либо y, либо n (символ).Наборы данных должны быть введены в два массива.Затем мне нужно создать файл класса, который получит эти два массива в конструктор, который затем будет проходить через определенные методы для проверки правильности ответов, количества правильных ответов и, наконец, какие кандидаты получили наиболее правильные ответы.

У меня только два вопроса:

1-й - первая строка данных, которая будет введена во второй массив, будет ключом ответа.Можно ли добавить 0 в начало массива идентификатора кандидата, чтобы два массива совпали (ID # {1} для ответа {1} и т. Д.)?

2nd - с вызовом моегофайл класса из моего файла клиента я объявляю массив в обоих?т.е.:

файл клиента:

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

конструктор класса:

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

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 09 октября 2011

Я собираюсь предположить, что структуры данных являются обязательными и определены как часть назначения, и не давать никаких входных данных для использования альтернативных, если не указано иное.

Первый вопрос:

Да, вы можете, но не так, как вы думаете. Однажды объявленные массивы занимают статический объем памяти со статическим числом элементов. Следовательно, вы не можете «вставить» элемент в начало массива, который уже был объявлен и выделен. Это тип поведения динамической коллекции, такой как 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 и добавьте ноль в начале, проблема решена.

Второй вопрос:

Вопрос о том, должны ли массивы объявляться в "файле клиента" (что бы это ни было), действительно зависит от вас.

0 голосов
/ 09 октября 2011

Похоже, что вы действительно ищете это Map<Integer,Char>.Это позволило бы вам явно связать идентификатор с ответом.

Если у вас уже есть int[] id и char[] 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), чтобы получить ответ на этот вопрос.

0 голосов
/ 09 октября 2011

1) Если вы управляете определением массивов, вы можете пропускать элементы и запускать где угодно.

2) int[] id = new int[]; char[] answer[] = new char[]; недействительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...