枚举中的等间距是否等于?

Col*_*ole 0 java enums enumeration

我正在编写Java课程,该部分是关于Enumerations的.我的枚举中有这个:

public enum tuna {
 Camaro("Orange", "1968"),
 Silverado("Red","1996"),
 Sierra("Black","2007"),
 Equinox("Silver","2011");

  private final String color;
  private final String year;


tuna(String carColor, String age){
    color = carColor;
    year = age;

 }
public String getColor(){
    return color;
 }

public String getYear(){
    return year;
 }
}
Run Code Online (Sandbox Code Playgroud)

这在我的Java类中打印出来:

for(tuna cars: tuna.values()){
    System.out.printf("%s\t\t%s\t\t%s\n", cars, cars.getColor(), cars.getYear()
Run Code Online (Sandbox Code Playgroud)

打印出来:

在此输入图像描述

看看西尔维拉多的"红色"和"1996"是如何在右边过去的(因为"西尔维拉多"比其他词更长)?那我怎么能解决这个问题,所以长词的细节与其他词的间隔相等?

PS如果我将"Silverado"缩短为"Silver",这是正常的:

在此输入图像描述

Tho*_*mas 5

我建议不使用制表符而不是字符串格式,即System.out.format(...) 通过获取最长名称的长度来使用和计算每个格式说明符的长度.然后动态构建格式字符串.

例:

//that's a shortcut, you'd have to calculate the max
int maxlength = tuna.Silverado.name().length();

for( tuna t : tuna.values() ) {
  System.out.format( "%-" + maxlength + "s   %-10s %4s\n", t.name(), t.getColor(), t.getYear() );
}
Run Code Online (Sandbox Code Playgroud)

输出:

Camaro      Orange     1968
Silverado   Red        1996
Sierra      Black      2007
Equinox     Silver     2011
Run Code Online (Sandbox Code Playgroud)