Добавление элементов массива Integer в Java - PullRequest
2 голосов
/ 28 апреля 2010

У меня есть массив, скажем

int a[]={2,0,1,0,1,1,0,2,1,1,1,0,1,0,1};

Мне нужно добавить каждый из 5 соседних элементов и назначить их новому массиву b с помощью length=(a.length/5);, и я хочу добавить 5 соседних элементов, чтобы у меня было: int b[]={20101,10211,10101}; Мне нужно сделать это для массивов различной длины, в большинстве случаев длина a превышает 15.

Любая помощь будет принята с благодарностью, я программирую на Java.

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

Ответы [ 5 ]

4 голосов
/ 28 апреля 2010

Это довольно просто:

// Assuming a.length % 5 == 0.
int[] b = new int[a.length / 5];
for (int i = 0; i < a.length; i += 5) {
    b[i/5] = a[i]*10000 + a[i+1]*1000 + a[i+2]*100 + a[i+3]*10 + a[i+4];
}
2 голосов
/ 28 апреля 2010

Звучит как домашнее задание, поэтому я не дам вам полного решения, но краткое изложение:

  1. Вычислить длину b: len = a.length / 5
  2. Постройте b с таким количеством элементов.
  3. Инициализируйте индексную переменную, чтобы она указала на первый элемент в
  4. Для каждого элемента в b:
    • Создайте значение для этого элемента из [idx] ... a [idx + 4]
    • Продвинуть индекс на 5.

Также обратите внимание, что вам может потребоваться проверить, что длина ввода a кратна 5.

1 голос
/ 28 апреля 2010

Работает с (a.length % 5) != 0 и сохраняет ведущие нули (сохраняя цифры в String).

    int a[]={2,0,1,0,1,1,0,2,1,1,1,0,1,0,1,0,0,7};

    final int N = 5;
    String b[] = new String[(a.length + N - 1)/ N];
    StringBuilder sb = new StringBuilder(N);
    int x = 0;
    for (int i = 0; i < b.length; i++) {
        sb.setLength(0);
        for (int k = 0; k < N && x < a.length; k++) {
            sb.append(a[x++]);
        }
        b[i] = sb.toString();
    }
    System.out.println(java.util.Arrays.toString(b));
    // prints "[20101, 10211, 10101, 007]"

Также вы можете использовать регулярное выражение:

    String[] arr =
        java.util.Arrays.toString(a)
        .replaceAll("\\D", "")
        .split("(?<=\\G.{5})");
    System.out.println(java.util.Arrays.toString(arr));
    // prints "[20101, 10211, 10101, 007]"

В основном это использует Arrays.toString(int[]) для добавления всех цифр в одну длинную String, затем удаляет все не-цифры \D, а затем использует \G -представленный вид сзади для разделения каждого .{5}

0 голосов
/ 22 октября 2012
import java.util.Arrays;

public class MainClass {
   public static void main(String args[]) throws Exception {
      int array[] = { 2, 5, -2, 6, -3, 8, 0, -7, -9, 4 };
      Arrays.sort(array);
      printArray("Sorted array", array);
      int index = Arrays.binarySearch(array, 1);
      System.out.println("Didn't find 1 @ "
      + index);
      int newIndex = -index - 1;
      array = insertElement(array, 1, newIndex);
      printArray("With 1 added", array);
   }
   private static void printArray(String message, int array[]) {
      System.out.println(message
      + ": [length: " + array.length + "]");
      for (int i = 0; i < array.length; i++) {
         if (i != 0){
            System.out.print(", ");
         }
         System.out.print(array[i]);         
      }
      System.out.println();
   }
   private static int[] insertElement(int original[],
   int element, int index) {
      int length = original.length;
      int destination[] = new int[length + 1];
      System.arraycopy(original, 0, destination, 0, index);
      destination[index] = element;
      System.arraycopy(original, index, destination, index
      + 1, length - index);
      return destination;
   }
}

Будет напечатано

Sorted array: [length: 10]
-9, -7, -3, -2, 0, 2, 4, 5, 6, 8
Didn't find 1 @ -6
With 1 added: [length: 11]
-9, -7, -3, -2, 0, 1, 2, 4, 5, 6, 8
0 голосов
/ 28 апреля 2010

Наивный подход.

import java.util.ArrayList;

/* Naive approach */
public class j2728476 {
    public static void main(String[] args) {
        int a[] = {2,0,1,0,1,1,0,2,1,1,1,0,1,0,1};
        ArrayList<String> al = new ArrayList<String>();
        String s = "";
        for (int i = 0; i < a.length; i++) {
            if (i % 5 == 0 && i != 0) {
                al.add(s);
                s = "" + a[i];
            } else {
                s += a[i];
            }
        }
        al.add(s);
        for (String t : al) {
            // convert values to ints ...
            System.out.println(t);
        }
    }
}

Напечатает:

20101
10211
10101
...