Есть ли способ распечатать различное количество элементов из массива в каждой строке - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу иметь возможность распечатывать различное количество элементов из моего массива в каждой строке.

 String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", 
             "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
         System.out.println(Arrays.toString(name));

Вывод этого даст мне

[Alix, Jack, Alexis, Adam, John, Lexi, George, Gregory, Paul, Bjorn, Aaron, Joseph, Anderson]

Но я хочу, чтобы вывод был чем-то вроде

[Alix, Jack, Alexis]

[Adam, John, Lexi]

[George, Gregory]

[Paul, Bjorn, Aaron, Joseph, Anderson]

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

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Вот пример, который позволит вам дать список размеров для каждого списка, так что вы можете легко создать вывод, который вы указали, вместо того, чтобы иметь 3 имени в каждом списке:

package com.inlet.ifserver;

import java.util.Arrays;

public class x {

    public static void main(String ...args) {
        String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
                "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};

        int[] counts = { 3, 3, 2 };

        int start = 0;
        for (int count : counts) {
            int end = Integer.min(start + count, name.length);
            if (end == start)
                break;
            System.out.println(Arrays.toString(Arrays.copyOfRange(name, start, end)));
            start = end;
        }
        if (start < name.length)
            System.out.println(Arrays.toString(Arrays.copyOfRange(name, start, name.length)));
    }
}

Вывод:

[Alix, Jack, Alexis]
[Adam, John, Lexi]
[George, Gregory]
[Paul, Bjorn, Aaron, Joseph, Anderson]
0 голосов
/ 19 февраля 2019

Как упомянул @Sid Arrays.copyOfRange - путь сюда.В этом примере представлен массив блоков различной длины, поэтому он соответствует ожидаемому результату в вашем вопросе.Выглядит это так

public static void printInBlocks(String[] arr, int[] blocks) {
    int idx = 0;

    for (int blockSize: blocks) {
        String str = Arrays.toString(Arrays.copyOfRange(name, idx, idx += blockSize));
        System.out.println(str);
    }
}

Вы можете затем позвонить с вашего Main вот так

public static void main(String[] args) {
    String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
            "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
    int[] blocks = {3, 3, 2, 5};

    printInBlocks(name, blocks);
}

Вывод выглядит как

[Alix, Jack, Alexis]
[Adam, John, Lexi]
[George, Gregory]
[Paul, Bjorn, Aaron, Joseph, Anderson]

Примечание

blocks, который содержит количество элементов в строке, должен иметь общую сумму, равную количеству элементов name

0 голосов
/ 19 февраля 2019

Вы можете разделить массив вручную и использовать метод copyOfRange.

import java.util.Arrays;

public class HelloWorld {

     public static void main(String []args){
        String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", 
             "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};

        int splitArrayForSize = 3; 

        for(int i=0; i< name.length; i+=splitArrayForSize){

            String[] subArray = Arrays.copyOfRange(name, i, 
                                        Math.min(name.length, i + splitArrayForSize));

            String subArrayAsString = Arrays.toString(subArray);
            System.out.println(subArrayAsString);   
        }  
    }
}

Вывод:

[Alix, Jack, Alexis]
[Adam, John, Lexi]
[George, Gregory, Paul]
[Bjorn, Aaron, Joseph]
[Anderson]

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

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