对于我的班级,我们必须制作一个程序,该程序接受用户输入并打印许多数量的斐波纳契序列。我设法做到了,但是我的教授希望它在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;时,这些值并非都正确排列并且它仍然是正确的。另外,注释掉的行是因为我无法打印出第一个序列。
答案 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