У меня есть проект, над которым я работаю, но я немного заржавел, поэтому мне нужна помощь, чтобы разобраться в этой части.

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

Еще до того, как я начал это делать, я провел некоторое исследование, чтобы выяснить, делал ли это кто-то еще раньше, и выяснил, что компания в США сделала это, но не так, как я себе представлял.

Это не бизнес-идея, а просто забавный проект для себя :)

Теперь вот моя проблема: я, конечно, сделал «прототип» без оружия и без целей. Весь текст на Java, чтобы увидеть, смогу ли я сделать эту работу. Я исследовал немного, так как я был ржавым (и до сих пор), и выяснил большинство проблем, с которыми я столкнулся.

Часть, в которой я застрял, находится в самом конце, у меня есть массив для всех снимков, но я хочу разделить этот массив на несколько массивов по размеру магазина.

Как бы я сделал это?

К сожалению, я не сохраняю свой код, если я решил удалить его, поэтому мои записки давно ушли, но я пробовал несколько вещей, которые приходили на ум, и в течение нескольких дней я не мог понять это. ,

Я попытался использовать вложенные циклы for, затем повторил попытку, но с помощью вложенных циклов в цикле while, и я, вероятно, тоже попробовал несколько разных вещей.

        if (hasrun == true) {
            //OUTPUT
            ms(2);
            System.out.print("You shot the following:");
            nl(1);
            int counter = 0;
            int i = 0;

            while (sf > magcap) {
                sf-=magcap;
                mnm++;
            }

            while (counter <= mnm) {
                System.out.print("Mag " + mn + ": ");

                for (i+=0; i < magcap; i++) {
                    System.out.print(shots[i] + " ");
                }

                counter++;
                mn++;
                nl(1);
            }

Просто чтобы прояснить некоторые вещи в моем коде здесь, я знаю, что это не самый чистый код, я не собираюсь чистить, и я знаю, что мне не нужна половина моих функций (методов), но я сделал их на практике так что они там. Любая помощь будет с благодарностью решить мою проблему, хотя! :)

Если вы хотите посмотреть весь мой код для этого проекта, перейдите на страницу pastebin

1
tsgsOFFICIAL 27 Янв 2020 в 16:43

3 ответа

Лучший ответ

Я понял это несколько, вот что я сделал. Пока не совсем реализовано, но это работает с массивом.

// OUTPUT
            while (sf >= magcap) {
                sf -= magcap;
                mn++;
            }
            ms(2);
            System.out.println(mn + " mags and " + sf + " shots fired");
            nl(2);
            for (int i = 0; i < mn; i++) {
                from = magcap * magcounter - magcap;
                to = magcap * magcounter;
                System.out.print("Mag " + magcounter + ": ");
                for (int j = from; j < to - 1; j++) {
                    System.out.print(shots[j] + ", ");
                }
                System.out.print(shots[to - 1] + ".");
                magcounter++;
                nl(1);
            }
            // PRINT THE REST
            if (sf >= 1) {
                from = magcap * magcounter - magcap;
                to = magcap * magcounter;
                if (sf == 1) {
                    System.out.print("Mag " + magcounter + ": ");
                    System.out.print(shots[from] + ".");
                } else {
                    System.out.print("Mag " + magcounter + ": ");
                    for (int i = 0; i < sf - 1; i++) {
                        System.out.print(shots[from + i] + ", ");
                    }
                    from += sf -1;
                    System.out.print(shots[from] + ".");
                }
            }

На выходе

1 2 3 4 5 6 7 8 9 10 
3 mags fired and 1 shots fired

Mag 1: 1 2 3 
Mag 2: 4 5 6 
Mag 3: 7 8 9 
Mag 4: 10 
0
tsgsOFFICIAL 29 Янв 2020 в 17:10

Используя System.arraycopy:

import java.util.Arrays;

public class Testing {
//  static int[] input = {1,2,3,4,5,6};      // testdata
  static int[] input = {1,2,3,4,5,6,7};    // testdata
//  static int[] input = {1,2,3,4,5,6,7,8};  // testdata
  static int magSize = 3;                  // testdata
//  static int magSize = 5;                  // testdata

  public static void main(String[] args) {
//    int resultSize = (int) Math.ceil((double) input.length / magSize);
    int resultSize = input.length % magSize == 0 ? 
                       input.length/magSize : 
                       input.length/magSize + 1;

    int[][] result = new int[resultSize][magSize];

    for (int i = 0; i < resultSize; i++) {
      System.arraycopy(input,                               // src
                       i*magSize,                           // srcPos
                       result[i],                           // dest
                       0,                                   // destPos
                       (i + 1) * magSize < input.length ? 
                          magSize :
                          input.length - i*magSize);        // length
    }

    System.out.println("Original : " + Arrays.toString(input));
    System.out.println("Result   : " + Arrays.deepToString(result));

/*
prints:
Original : [1, 2, 3, 4, 5, 6, 7]
Result   : [[1, 2, 3], [4, 5, 6], [7, 0, 0]]
*/
  }
}
1
Scratte 27 Янв 2020 в 15:48

Вы можете использовать Guava, чтобы сделать это легко,

        int[] x = {1,2,3,4,5,6};
        int splitSize =  3;

        List<Integer> list = IntStream.of(x).boxed().collect(Collectors.toList());
        //partition
        List<List<Integer>> partitioned = Lists.partition(list, splitSize);

        //result: [[1,2,3], [4,5,6]]
2
Shafiul 27 Янв 2020 в 13:58