Вы пытались создать именованный тип для перечисления?
i.e.
enum SCREEN_TYPE { SCREEN_MAIN_MENU, SCREEN_LOADING, SCREEN_GAME };
вы можете сделать это
public static int[] Divisible(int[] array, int target){
List<Integer> list = new ArrayList<>();
for (int i = 0; i<array.length; i++){
if (array[i] % target == 0){
list.add(array[i]);
}
}
int[] ints = new int[list.size()];
for (int i = 0; i < ints.length; i++) {
ints[i] = list.get(i);
}
return ints;
}
Два варианта:
вы можете использовать ArrayList для внутреннего использования, поскольку он может динамически расти (вы просто продолжаете добавлять интересующие вас значения, готово). Если вам нужно вернуть массив, вы можете легко сделать это на основе вашего заполненного списка.
при работе только с массивами вы можете просто сделать 2 прохода: сначала создайте этот большой массив и заполните его. Тогда посчитайте ненулевые записи! Создайте новый массив с меньшей длиной, а затем вручную скопируйте все ненулевые элементы.
Я использовал метод, указанный @GhostCat, но он заставил меня полностью изменить код. Это мой новый код
public static Object[] Divisi(int[] array, int target){
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 0; i<array.length; i++){
if (array[i] % target == 0){
answer.add(array[i]);
}
}
return answer.toArray();
}
Это дало мне желаемый ответ, но как еще я могу сделать это без преобразования в объект
Самый короткий и самый быстрый способ сделать это - вы можете изменить массив на ArrayList и затем использовать метод .toArray (), чтобы вернуть его в качестве примитивного массива при возврате.
public static Integer[] Divisible(int[] array, int target){
List<Integer> answer = new ArrayList<>();
for (int i = 0; i<array.length; i++){
if (array[i] % target == 0) {
answer.add(array[i]); // pushing to list only if the number is divisible
}
}
return answer.toArray(new Integer[0]); // converting the list to an array before returning
}
Если вы хотите получить список уникальных номеров, используйте «Set» вместо «List».
Set<Integer> answer = new HashSet<>();
Вместо того, чтобы использовать примитив int, я согласился использовать вместо него Integer. Вот мое решение.
public static Integer[] divisible(Integer[] array, int target) {
int j = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < array.length; i++) {
if (array[i] % target == 0) {
j++;
list.add(array[i]);
}
}
Integer answer[] = new Integer[j];
answer = list.toArray(answer);
return answer;
}
Основная идея - заполнить массив ответов снизу, а затем обрезать его до нужного размера.
int j = 0;
for (int i=0; i<array.length; i++) {
if (array[i] % target == 0){
answer[j++] = array[i];
}
}
return Arrays.copyOf(answer, j);
Массивы - это стандартный служебный класс Java.
Если вам не разрешено использовать служебный класс Arrays, тогда последняя строка может быть заменена на:
int[] answer2 = new int[j];
for (int i=0; i<j; i++)
answer2[i] = answer[i];
return answer2;
Мне это кажется немного неуклюжим, но удовлетворяет очевидным требованиям для использования простых массивов .
Вы должны использовать отдельный счетчик для массива результатов и продолжать увеличивать счетчик, если число делится на цель.
Примерно так:
int[] result=new int[array.length];
int resultindex=0; //create a separate counter
for(int i=0;i<array.length;i++)
{
if(array[i]%target==0)
{
result[resultindex]=array[i];
++resultindex; //update the counter
}
}