Столкнулся с такой проблемой, нужно организовать на сайте вывод данных в ввиде пираммиды, по принцыпу:
1
1 1
1 1 1
1 1 1 1
1 1 1
1 1 1 1
Проблема в том что все данные уникальны, пробовал выводить через ArrayList - ничего не получается т.к. три верхних значения не влезают в цикл. Может кто-то сталкивался с такой проблемой?
for (int i = 0; i < 1; i++) {
System.out.println(" " + " " + " " + list.get(0) + " " + " " + " ");
System.out.println(" " + " " + list.get(1) + " " + list.get(2) + " " + " ");
}
Это черновой вывод трех первых значений. Но как впихнуть это в цикл вывода остальных значений (или как остальные значения подвязать сюда) - я не знаю.
если продолжить вашу мысль может так:
System.out.println(" " + list.get(0));
System.out.println(" " + list.get(1) + " " + list.get(2));
for (int i = 3, end = list.size();i < end;) {
System.out.println(" " + list.get(i++) + " " + list.get(i++) + " " + list.get(i++));
System.out.println(list.get(i++) + " " + list.get(i++) + " " + list.get(i++) + " " + list.get(i++));
}
Это если совсем просто, но работать будет только при условии что у вас в списке гарантированно 3 + 7n элементов. Если это условие не выполняется, то логику придётся немного усложнить. Да и пирамида будет стройной только при условии, что элемент содержит 1 символ.
Описал решение с любым количеством данных, но стройная будет пирамида только при содержании элементов с длиной в один символ.
Для стройности с любыми данными, необходимо откорректировать метод вывода.
Но тогда Вам необходимо будет продумать логику.
Представленный мною код сейчас генерирует n <= 10 количество списков с n <= 50 количеством элементов:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Pyramid {
public static void main(String[] args) {
process(generateSourceList());
}
private static List<List<String>> generateSourceList() {
List<List<String>> sources = new ArrayList<>();
int countSources = new Random().nextInt(10) + 1;
for (int i = 0; i < countSources; i++) {
List<String> source = new ArrayList<>();
int countSource = new Random().nextInt(50) + 1;
System.out.println("Сгенерирован источник с " + countSource + " элементами");
for (int cs = 0; cs < countSource; cs++) {
source.add("1");
}
sources.add(source);
}
System.out.println("Сгенерировано: " + countSources + " источников");
return sources;
}
private static void process(List<List<String>> sources) {
for (List<String> list : sources) {
System.out.println("==============================");
System.out.println("Вывод пирамиды из " + list.size() + " элементов");
System.out.println("==============================");
printPyramidData(
createPyramidDataFromList(list)
);
System.out.println();
}
}
private static PyramidData createPyramidDataFromList(List<String> data) {
int beginSubstr = 0;
List<List<String>> listRows = new ArrayList<>();
int maxLen = 0;
for (int i = 0; i < data.size(); i++) {
int step = i + 1;
if (beginSubstr + step < data.size()) {
List<String> row = data.subList(beginSubstr, beginSubstr + step);
maxLen = row.size() > maxLen ? row.size() : maxLen;
listRows.add(row);
beginSubstr = beginSubstr + step;
} else {
System.out.println("Лишние элементы: " +
Arrays.toString(
data.subList(beginSubstr, data.size())
.toArray()
)
);
break;
}
}
System.out.println("Получено: " + listRows.size() + " строк");
return new PyramidData(listRows, maxLen);
}
private static void printPyramidData(PyramidData pyramidData) {
int maxLenWithSpace = pyramidData.maxLen() + (pyramidData.maxLen() - 1);
for (List<String> list : pyramidData.data()) {
int listSize = list.size();
int startPost = (maxLenWithSpace - (listSize + (listSize - 1))) / 2;
for (int l = 0; l < maxLenWithSpace; l++) {
if (l == startPost) {
for (int s = 0; s < listSize; s++) {
String val = list.get(s);
if (s == (listSize - 1)) {
System.out.print(val);
} else {
System.out.print(val + " ");
}
}
} else {
if (l == (maxLenWithSpace - 1)) {
System.out.println(" ");
} else {
System.out.print(" ");
}
}
}
}
}
}
class PyramidData {
private List<List<String>> data;
private int maxLen;
PyramidData(List<List<String>> data, int maxLen) {
this.data = data;
this.maxLen = maxLen;
}
List<List<String>> data() {
return data;
}
int maxLen() {
return maxLen;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите пожалуйста как записать или прочитать файл из общей внутренней памяти устройства (storage/emulated/0)? Где указывать путь? Если можно,...
Нужно, что бы автоматически вывелся текст в TextView, а по прошествию паузы он изменилсяУ меня так:
Из приложения заполняю данные на сервер Firebase, и тут же отображаю их в RecyclerView, по при первом запуске когда происходит запись на сервер в RecyclerView...