Построение горизонтального графика в консольном приложении Java

#java #graph #console-application

Вопрос:

Я пытаюсь построить график, показывающий вес с соответствующими датами, из двух списков массива. Один с локальными датами (дата ввода веса), а другой удваивается (вес). По оси X будет указан вес, а по оси Y-дата.

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

Я нашел некоторый код для построения графика по вертикали, но мне не нравится, как это выглядит.

(В приведенном ниже коде я использовал уже заполненный массив, просто для наглядности.)

 public void writeGraph() {  Arrays.sort(weightSorted);   for (int i = weightSorted.length - 1; i gt;= 0; i--) {  System.out.println(weightSorted[i]   "n");  }   System.out.println("KG");   System.out.print(" ");  System.out.println(" ");   System.out.print("Date gt; ");  for (int in = 0; in lt; weighDate.length; in  ) {  System.out.print(weighDate[in]   " ");  } }  

Это будет выглядеть так:

 90.0  86.0  83.8  83.3  81.0  78.5  75.0  73.9  70.3  65.5  KG   Date gt; 2021-01-14 2021-02-25 2021-03-06 2021-04-04 2021-05-11 2021-06-20 2021-07-02 2021-08-28 2021-09-15 2021-10-07   

А затем я хочу, чтобы веса по оси y были удвоены по сравнению с соответствующими датами по оси x.. Я надеюсь, что это даст вам представление о том, чего я пытаюсь достичь.

Ответ №1:

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

Кроме того, я думаю, что, возможно, a Maplt;LocalDate, Doublegt; даст вам лучшие инструменты для обработки данных.

После этого подумайте, возможно, о создании метода, который, используя имеющиеся у вас данные X/Y, построит соответствующую горизонтальную линию. т. Е.: Для строки 81 КГ посмотрите, есть ли точка данных X/Y с этим значением в любой дате, затем, если да, нанесите ее соответствующим символом (вертикальной линией) в строке.

TLDR: Стройте по одной строке за раз, сверху вниз, используя имеющиеся у вас данные и планируя необходимые места.

Комментарии:

1. Спасибо за ваш вклад! Я посмотрю на это.