是什么导致我的循环忽略了这个" \ t"只在第一次迭代?

时间:2015-12-16 08:48:36

标签: java system.out

出于某种原因,我的循环只输出" \ t"在我的for循环的第一次迭代之后。 这是我的循环代码:

input = -1;
private String[] types = {"none", "vanilla", "hazelnut", "peppermint", "mocha", "caramel"};
while ( (input < 0) || (input > (types.length - 1)) ){ //gets user's latte flavor input
        System.out.println("Enter the number corresponding to the latte type you would like:");
        for ( int i = 0; i < types.length; i++ ){
            if ( i <= (types.length - 2) ){ //prints two options per line
                System.out.println(i + ": " + types[i] + "\t" + (i + 1) + ": " + types[i + 1]);
            }
            else if ( i == (types.length - 1) ){
                System.out.println(i + ": " + types[i]);
            }
            else{ //does nothing on odd indices
            }
            i++;
        }
        input = keyboard.nextInt();
    }

这输出以下内容:

Enter the number corresponding to the latte type you would like:
0: none     1: vanilla
2: hazelnut     3: peppermint
4: mocha        5: caramel

我们可以看到,&#34; 1:vanilla&#34;不是以与其他行相同的方式间隔开。但是,我的Tea类的代码可以正常工作:

input = -1;
private String[] types = {"white", "green", "oolong", "black", "pu-erh", "camomille"};
while ( (input < 0) || (input > (types.length - 1)) ){ //gets user's tea flavor input
        System.out.println("Enter the number corresponding to the tea type you would like:");
        for ( int i = 0; i < types.length; i++ ){
            if ( i <= (types.length - 2) ){ //prints two options per line
                System.out.println(i + ": " + types[i] + "\t" + (i + 1) + ": " + types[i + 1]);
            }
            else if ( i == (types.length - 1) ){
                System.out.println(i + ": " + types[i]);
            }
            else{ //does nothing on odd indices
            }
            i++;
        }
        input = keyboard.nextInt();
    }

这会输出以下内容:

Enter the number corresponding to the tea type you would like:
0: white    1: green
2: oolong   3: black
4: pu-erh   5: camomille

是什么原因导致我的Latte循环(我的Espresso循环也遇到这个间距问题)输出与我的Tea循环不同?感谢您帮助我理解这种行为!

7 个答案:

答案 0 :(得分:5)

TAB实际上就在那里。请注意,0: none比您发布的其他示例短一个字符。因此,您可以选择较早的制表位。

答案 1 :(得分:3)

由于还没有,我将使用printf提供解决方案。您可以使用格式化程序(如System.out.printf()来格式化字符串):

System.out.printf("%d: %-12s%d:%-12s\n", i, types[i], i+1, types[i+1]);
  • %d允许您输入整数类型。
  • %-12s允许您输入一个字符串(最小长度为12左对齐)...这将替换您的标签!

答案 2 :(得分:1)

与其他人相比,

none是一个小词。你可以填充types数组中最后用空格填充的单词,以便解决这个问题。

答案 3 :(得分:1)

标签很棘手,因为它们受到在线位置和标签宽度的影响。

更好地使用空格填充。使用Apache Commons

的便捷方式
StringUtils.rightPad(types[i], COLUMN_WIDTH)

(根据您最长的文字调整COLUMN_WIDTH

答案 4 :(得分:0)

以下是格式

的修复
System.out.println(i + ": " + String.format("%-5s\t", types[i]) + (i + 1) + ": " + types[i + 1]);

这将解决问题。

答案 5 :(得分:-1)

这是由于数组中第一个String的长度造成的。尝试用“nonee”代替“none”,然后看看。

如果你想要正确地做,你应该使用某种填充。

答案 6 :(得分:-1)

如上所述,该选项卡存在。至于为什么事情不一致。您可以参考此link