Ошибка интервала в выводе программы - PullRequest
0 голосов
/ 22 октября 2019

"Напишите программу, которая печатает таблицу значений (ln n), n, n * (ln n), n2, n3 и 2n для n = 16, 32, 64, ... , 2048. Используйте символы табуляции ('\ t') для выравнивания столбцов. "

Это было задание. Однако при использовании \ t выходные данные расположены неправильно. Интервал между значениями не является четным, а некоторые значения смещены вправо. Как я могу это исправить?

public class Main {
  public static void main(String[] args) { 

      for (int n = 16; n<2049; n*=2){
          System.out.println(Math.log(n) +"\t"+ n + "\t"+ (Math.log(n)*n)+"\t"+Math.pow(n,2)+"\t"+Math.pow(n,3)+"\t"+Math.pow(2,n)+"\t");
      }
  }
}

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Ладно, с вкладками все в порядке, но помните, что они, вероятно, содержат до 8 пробелов, и этот код, когда я запускаю его, печатает ваши двойные числа до большего количества цифр, чем это. В связанном ответе объясняется, как форматировать ваши числа в меньшем количестве мест.

Связанный вопрос переполнения стека

Лично я бы вместо этого использовал System.out.printf со строкой форматирования.

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

public class Main {
  public static void main(String[] args) {

      for (int n = 16; n<2049; n*=2){
          //System.out.println(Math.log(n) +"\t"+ n + "\t"+ (Math.log(n)*n)+"\t"+Math.pow(n,2)+"\t"+Math.pow(n,3)+"\t"+Math.pow(2,n)+"\t");
          System.out.printf( "%12.5f\t %6d\t %12.5f\t %14.0f\t %14.0f\t %16.0f\n",
              Math.log(n), n,
              Math.log(n)*n,
              Math.pow(n,2),
              Math.pow(n,3),
              Math.pow(2,n));
      }
  }
}

Это не идеально, потому что последний столбец очень быстро становится действительно большим. Но я получаю такой вывод:

 2.77259         16      44.36142               256            4096             65536
 3.46574         32     110.90355              1024           32768        4294967296
 4.15888         64     266.16852              4096          262144  18446744073709552000
 4.85203        128     621.05987             16384         2097152  340282366920938460000000000000000000000
 5.54518        256    1419.56543             65536        16777216  115792089237316200000000000000000000000000000000000000000000000000000000000000
 6.23832        512    3194.02221            262144       134217728  13407807929942597000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 6.93147       1024    7097.82713           1048576      1073741824          Infinity
 7.62462       2048   15615.21968           4194304      8589934592          Infinity
0 голосов
/ 22 октября 2019

Сделайте что-то вроде этого:

System.out.print(format(n) + "\t");
System.out.print(format(Math.log(n)) + "\t");
System.out.print(format(Math.log(n)*n) + "\t");

и определите функцию 'format', которая возвращает строку и добавляет пробелы n-input.length, чтобы каждый вход имел одинаковую длину.

...