2015-11-01 3 views
0

Я распечатываю список массивов с несколькими параметрами под каждым заголовком, используя метод toString в отдельном классе, но я не уверен, как отформатировать его так, чтобы он был выровнен , Что хорошего в реализации printf в этой ситуации? Кажется ReaВыравнивание массива с несколькими типами с соответствующими заголовками

EmployeeFX (Если метод ToString есть):

package p20; 

public class EmployeeFX 
{ 

private static int id; 
private String firstName; 
private String lastName; 
private boolean salaried; 
private double salary; 

public EmployeeFX(int id, String firstName, String lastName,boolean salaried, int salary) 
{ 
    this.id=id; 
    this.firstName=firstName; 
    this.lastName=lastName; 
    this.salaried=salaried; 
    this.salary=salary; 
} 

public int getId() { 
    return id; 
} 

public String getFirstName() { 
    return firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public boolean isSalaried() { 
    return salaried; 
} 

public double getSalary() { 
    return salary; 
} 

public final String toString() 
{ 
    String str; 
    str=String.format("%-3d %-3d %-3d %-3d %-3d", getId(),getFirstName(),getLastName(), isSalaried(), getSalary()); 
    return str; 
} 

} 

EmployeeOrderingDemo (Где выход будет) пакет P20; импорт java.io. ; импорт java.util.;

public class EmployeeOrderingDemo { 

public static void main(String[] args) 
{ 
    Scanner input=null; 
    ArrayList<EmployeeFX> employeeList=new ArrayList<EmployeeFX>(); 
    try 
    { 
     FileReader Info=new FileReader("P01_DATA.txt"); 
     input=new Scanner(Info).useDelimiter("\\s+"); 
    } 
    catch(FileNotFoundException noFile) 
    { 
     System.out.println("Can't open file"); 
     System.exit(1); 
    } 

    input.nextLine(); 
    input.nextLine(); 
    try 
    { 
     while(input.hasNext()) 
     { 
      employeeList.add(new EmployeeFX(input.nextInt(),input.next(),input.next(), input.nextBoolean(), input.nextInt())); 

     } 
    } 
    catch(NoSuchElementException element) 
    { 
     System.err.println("Wrong type of file"); 
     element.printStackTrace(); 
     System.exit(1); 
    } 
    catch(IllegalStateException state) 
    { 
     System.err.println("Couldn't read from file"); 
     System.exit(1); 
    } 
    if(input!=null) 
    { 
     input.close(); 
    } 

    outputData("Output in ORIGINAL order", employeeList, EmployeeOrdering.SALARIED); 



} 

public static void outputData(String str, ArrayList<EmployeeFX> employeeList, Comparator<EmployeeFX> specificComparator) 
{ 
    String headerString= "Id FirstName LastName Salaried Salary";//The headers themselves 
    System.out.println("\n" + str + "\n\n" + headerString + "\n"); 
    Collections.sort(employeeList, specificComparator); 
    for(EmployeeFX element:employeeList) 
    { 
     System.out.println(element); 
    } 

} 
} 
+0

Выровнять arraylist? Вы можете быть более конкретным, каков результат, на который вы стремитесь? –

+0

Извините. У меня есть серия списков массивов. Каждый список массивов имеет четыре типа данных. Я хочу поместить эти типы данных в соответствующие заголовки (это прокомментировано во второй программе). – Matt

ответ

1

Вы можете использовать String.format для toString для возврата форматированной строки. Отформатируйте его так же, как если бы вы использовали printf.

-EDIT- Попробуйте% s для строк. Также, возможно,% f для двойного. Количество цифр за десятичное место также регулируется. например Например, если вы хотите только две цифры в десятичной запятой, вы можете сказать, что% -3.2f

Сообщите мне, если это не поможет решить эту проблему.

+0

Неотложная вещь, которую нужно отметить, это использование статического int для id. Все объекты будут иметь один и тот же идентификатор при печати, если в коде отсутствует что-то, что вы здесь не включаете. Статический может быть полезен, например, если вы хотите автоматически увеличивать идентификатор сотрудника каждый раз, когда вы создаете новый объект Employee. Если вы не хотите, чтобы все ваши объекты делились одним и тем же идентификатором, я бы предложил вам не использовать статический, если вы не планируете его хранить в нестатической переменной. – Monkeygrinder

+0

Я пробовал это сделать, но у меня есть IllegalFormatConversionException – Matt

+0

, можете ли вы показать, что вы пытались сделать? (возможно, лучше всего включить в вопрос) – Monkeygrinder