Java中的左对齐

时间:2017-10-25 20:57:03

标签: java

对于我的班级,我们必须制作一个程序,该程序接受用户输入并打印许多数量的斐波纳契序列。我设法做到了,但是我的教授希望它在15的宽度范围内并且向左对齐。出于某种原因,我不理解,它只是不会给我正确的输出。这就是我所拥有的:

boolean valid = false;  
while (valid == false) {

    System.out.println("Please enter a valid number (between: 1 - 50):");
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();

    if  (n < 1) {
       System.out.println("The number entered " + n + " is not valid");
    }
    else if (n > 50) {
       System.out.println("The number entered " + n + " is not valid");
    } 
    else if (n >= 1 || n <= 50) {
       valid = true;
       //System.out.printf("%15s", "1 ");
       int a = 0;
       int b = 1;
       for (int i = 1; i <= n; i++) {
           int nextNumber = a + b;
           if (i%5 != 0) {
               System.out.printf("%15s", nextNumber + " ");
           }
           else {
               System.out.printf("%15s", nextNumber + " " + "\n");
           }
           a = b;
           b = nextNumber;

输出是正确的,但是当我把它输出'#14;% - 15s&#34;时,这些值并非都正确排列并且它仍然是正确的。另外,注释掉的行是因为我无法打印出第一个序列。

2 个答案:

答案 0 :(得分:0)

代码中使用%-15s格式的主要问题是这一行:

System.out.printf("%-15s", nextNumber + " " + "\n");

你得到了一个字符串,例如"123 \n"并用空格右边打印它,但这些空格是在新行的\n之后添加的,这会产生所有混乱(a解决此问题的可能方法是将\n包含在格式字符串中:"%-15s\n")。似乎是右对齐文本实际上是左对齐文本,在行的开头有空格。

我们需要解决这个问题。此外,我们可以摆脱转换为字符串,冗余空间,单独处理第一个数字:

int a = 0;
int b = 1;

for (int i = 0; i <= n; i++) {
    System.out.printf("%-15d", b); 
    if (i % 5 == 4) System.out.println();

    int nextNumber = a + b;
    a = b;
    b = nextNumber; 
} 

答案 1 :(得分:0)

我认为你不需要printf中的空格 - 这就是%-15提供的空间。另外,顺便说一下,你绝对不需要布尔值或while循环。这似乎对我有用:

public class Test { 

    public static void main(String[] args) {
        new Test().fib();
    }

    void fib() {
        System.out.println("Please enter a number between 1 and 50:");
        Scanner scan = new Scanner(System.in);
        final int n = scan.nextInt();

        if (n < 1 || n > 50) {
            System.out.println("The number entered is not valid");
            System.exit(0);
        }

        int a = 0;
        int b = 1;
        for (int i = 1; i <= n; i++) {
            int next = a + b;
            System.out.printf("%-15d", next);
            if (i % 5 == 0) System.out.println();
            a = b;
            b = next;
        }
    }

}

例如:

Please enter a number between 1 and 50:
45
1              2              3              5              8              
13             21             34             55             89             
144            233            377            610            987            
1597           2584           4181           6765           10946          
17711          28657          46368          75025          121393         
196418         317811         514229         832040         1346269        
2178309        3524578        5702887        9227465        14930352       
24157817       39088169       63245986       102334155      165580141      
267914296      433494437      701408733      1134903170     1836311903