Почему значения не будут правильно выровнены в Java? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь сгенерировать таблицу выходных данных в Java со значениями второго столбца, расположенными точно друг над другом.Вместо этого я получаю значение, «отталкиваемое» вправо, даже если строка не перекрывает отступы.Я знаю, что это довольно длинная строка, но ее всего 27, а для отступа задано значение 30, поэтому не следует ли просто заполнить последние три пробела и распечатать там вместо того, чтобы прыгать вправо?

Я попытался изменить все значения заполнения на 1, а 30 на 15, но они все еще не совпадают.Цена действительно перемещается, но не совпадает с другими линиями, когда я изменяю их значение заполнения, чтобы соответствовать.

Я думаю, я мог бы просто сделать их разными числами, но я хочу, чтобы это правильно выровнялось с любым размеромСтрока, до 30 символов.Изменение длины цены с 17,46 до 0,0, похоже, тоже не помогает.

Мне нужно сократить его до "2 Medium Red Roaste", чтобы он работал, на "2Medium Red Roasted "начинает сдвигаться.Таким образом, он работает правильно при 19 символах, но не при 20.

System.out.printf ("%d %-13s%30.2f%n",2,"Medium Roasted Red Pepper",17.46);
System.out.printf ("%d %-13s%30.2f%n",1, "Large Cheese" ,7.69);
System.out.printf ("%-13s %30.2f%n","Tax" , 1.76);
System.out.printf ("%-13s %30.2f%n","Delivery" , 2.69);
System.out.printf ("%-13s %30.2f%n","Total" , 29.61);

Я получаю это в качестве вывода:

2 Medium Roasted Red Pepper___________________________17.46
1 Large Cheese___________________________7.69
Tax_____________________________________1.76
Delivery________________________________2.69
Total__________________________________29.61

Я ожидал этого:

2 Medium Roasted Red Pepper_____________17.46
1 Large Cheese__________________________7.69
Tax____________________________________1.76
Delivery________________________________2.69
Total__________________________________29.61

(где все цифры располагаются справа)

1 Ответ

0 голосов
/ 25 сентября 2019

Ваш код выровнен не так, как вы ожидаете, потому что отрицательная ширина означает минимум ширина для этого поля.Если поле шире указанной ширины, оно будет использовать необходимое пространство.(Некрасивая таблица, вероятно, лучше, чем вводящая в заблуждение таблица с усеченными значениями.)

Чтобы правильно настроить выравнивание, необходимо настроить самый большой элемент, который вы хотите отобразить.Вы также не можете использовать ширину для столбца цены для этого, %30.2f означает всегда отображать (место для) 30 цифр перед десятичной запятой.Вы должны сделать разумное предположение о ширине столбца или проверить максимальную необходимую длину.

public class RightAligned {
    public static void main(String[] args){
        String[] items = new String[] {
            "some really long item that extends far to the right",
            "short item",
            "medium longish item",
        };

        int longest = 0;
        for (String item : items) {
            if (longest < item.length()) {
                longest = item.length();
            }
        }

        String formatString = "%-" + longest + "s %5.2f%n";
        for (String item : items) {
            System.out.printf(formatString, item, 123.45);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...