java.util.IllegalFormatConversionException:d!= java.lang.String

时间:2017-04-26 09:47:42

标签: java android arrays arraylist

使用ArrayList

打印输出列表时遇到问题
package data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Manager {
List<Person> p = new ArrayList();
Scanner sc = new Scanner(System.in);

public void addStudent() {
    String id;
    String name;
    int yob;
    double point1;
    double point2;
    System.out.println("Input student id:");
    id = sc.nextLine();
    System.out.println("Input student name:");
    name = sc.nextLine();
    System.out.println("Input yob:");
    yob = Integer.parseInt(sc.nextLine());
    System.out.println("Input point 1:");
    point1 = Double.parseDouble(sc.nextLine());
    System.out.println("Input point 2:");
    point2 = Double.parseDouble(sc.nextLine());
    p.add(new Student(id,name,yob,point1,point2));
}
public void addEmployee() {
    String id;
    String name;
    int yob;
    double salaryRatio;
    double salary;
    System.out.println("Input employee id:");
    id = sc.nextLine();
    System.out.println("Input employee name:");
    name = sc.nextLine();
    System.out.println("Input employee yob:");
    yob = Integer.parseInt(sc.nextLine());
    System.out.println("Input salary ratio:");
    salaryRatio = Double.parseDouble(sc.nextLine());
    System.out.println("Input salary:");
    salary = Double.parseDouble(sc.nextLine());
    p.add(new Employee(id, name, yob,salaryRatio, salary));
}
public void addCustomer() {
    String id;
    String name;
    int yob;
    String companyName;
    double bill;
    System.out.println("Input customer id:");
    id = sc.nextLine();
    System.out.println("Input customer name:");
    name = sc.nextLine();
    System.out.println("Input customer yob:");
    yob = Integer.parseInt(sc.nextLine());
    System.out.println("Input compnay name:");
    companyName = sc.nextLine();
    System.out.println("Input bill:");
    bill = Double.parseDouble(sc.nextLine());
    p.add(new Customer(id,name,yob,companyName,bill));
}
public void addWho() {
    int choice;
    do {
    System.out.println("1.Add Student");
    System.out.println("2.Add Employee");
    System.out.println("3.Add Customer");
    System.out.println("4.Back to menu");
    System.out.println("==============");
    System.out.println("Choice:");
    choice = Integer.parseInt(sc.nextLine());
    switch(choice) {
        case 1:
            addStudent();
            break;
        case 2:
            addEmployee();
            break;
        case 3:
            addCustomer();
            break;
        case 4:
            break;
    }
    }
    while(choice != 4);
}
public void printPersonById() {
    Collections.sort(p, Comparator.comparing(Person::getId));
    for (int i = 0; i < p.size(); i++) {
        System.out.println(p.get(i));
    }
}

学生,员工和客户是类Person的子类。当我尝试 打印列表时,它有一个错误: 线程&#34; main&#34;中的例外情况java.util.IllegalFormatConversionException:d!= java.lang.String

我该如何解决?

2 个答案:

答案 0 :(得分:0)

使用System.out.println(p.get(i).someMethodOrVariableOfPerson);代替System.out.println(p.get(i));

如下所示

    public void printPersonById() {
        Collections.sort(p, Comparator.comparing(Person::getId));
        for (int i = 0; i < p.size(); i++) {
            System.out.println("id :"+p.get(i).id);
            System.out.println("name :"+p.get(i).name);

        }
    }

你不能直接在out.println()方法中打印Person类对象。 out.println()只允许字符串值

答案 1 :(得分:0)

在您的代码中尝试此操作:

System.out.println("Input yob:");
yob = sc.nextInt(); 
System.out.println("Input point 1:"); point1 =sc.nextDouble(); 
System.out.println("Input point 2:"); point2 = sc.nextDouble(); 
p.add(new Student(id,name,yob,point1,point2));