我正在尝试使用toString()方法来打印出一些私有字段。但是,每当我尝试将相应类的对象发送到print方法时,它只打印出每个字段的默认值,无论我将它们更改为什么。任何帮助都将非常感激:)这是带有toString()方法的类(它还覆盖了getter来自的另一个类)。对不起,我编辑这篇文章很慢。这里不熟悉文本编辑器。
人类
public class Person
{
// Declare all the fields as strings
private String firstName = "", lastName = "", address = "", zipcode = "",
phone = ""; // There are accessors and mutators for these as well
public String toString()
{
String str = "First name: " + firstName + "...Last name: " + lastName +
"... Street address: " + address + "... Zipcode: " + zipcode +
"... Phone number: " + phone;
return str;
}
学生班
public class Student extends Person
{
// declare fields that are not in Person
private String major = "";
private double gpa;
// Declare accessor and mutator methods for the fields
public String getMajor()
{
return major;
}
public void setMajor(String major)
{
this.major = major;
}
public double getGpa()
{
return gpa;
}
public void setGpa(double gpa)
{
this.gpa = gpa;
}
// Create a toString method that overrides the one in Person
public String toString()
{
String str = "First name: " + getFirstName() + "...Last name: " +
getLastName() + "... Street address: " + getAddress() +
"... Zipcode: " + getZipcode() + "... Phone number: " +
getPhone() + "... Grade point average: " + getGpa() +
"...Major: " + getMajor();
return str;
}
}
这是整个主要课程......很多是繁琐的代码,因为它是一个家庭作业,但主要的想法是: “编写一个名为CollegeList的应用程序,声明一组4名”常规“大学员工,3名教师和7名学生。提示用户指定将输入哪种类型的人员数据('C','F'或'S' )或允许用户退出('Q')。当用户选择继续(即不退出)时,接受适当类型的人的数据输入。如果用户尝试输入超过 4名大学员工,3名教师或7名学生,显示错误消息。当用户退出时,在屏幕上显示一个报告,列出适当标题为“College Employees”,“Faculty”或“Students”的每组人员。如果用户在会话期间没有为一个或多个类型的人员输入数据,请在相应的标题下显示相应的消息。
MAIN CLASS
import java.util.Scanner; // Needed for Scanner class
public class CollegeList
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
// Declare the arrays of people
Person[] people = new Person[14];
// These three arrays are being made to print out the types of people
// at the end neatly
Faculty[] fArray = new Faculty[4];
Student[] sArray = new Student[7];
CollegeEmployee[] cArray = new CollegeEmployee[3];
// Prompt for users input
System.out.print("Please choose the type of person you are entering " +
"data for.\nFor a student enter \"S\"; for a faculty member " +
"enter \"F\"; for a college employee enter \"C\"; and to quit "
+ "enter \"Q\": ");
Scanner keyboard = new Scanner(System.in);
String type = keyboard.next(); // the type of person
System.out.println();
// initialize counts of persons so that user does not enter more
int facultyCount = 0;
int studentCount = 0;
int employeeCount = 0;
// initialize index of the array to 0
int index = 0;
// continue until the user enters Q or until one of the types of people
// overflows or until all 14 elements are taken up
while (!type.equals("Q") && (facultyCount <= 3) && (studentCount <= 7)
&& (employeeCount <= 4) && (index < 14))
{
if(type.equals("S") && !type.equals("Q")) // Enter info for student
{
// Give the indexes the adresses
people[index] = new Student();
sArray[studentCount] = new Student();
// Set the info
personInfo(people[index]);
studentInfo((Student)people[index]);
System.out.println("\n");
// Increment the counts
studentCount++;
index++;
}
else if(type.equals("C") && !type.equals("Q")) // Enter info for
{ // college employee
// Give the indexes the adresses
people[index] = new CollegeEmployee();
cArray[employeeCount] = new CollegeEmployee();
// Set the info
personInfo(people[index]);
employeeInfo((CollegeEmployee)people[index]);
System.out.println("\n");
// Increment the counts
employeeCount++;
index++;
}
else if(type.equals("F") && !type.equals("Q")) // enter info for faculty
{
// Give the indexes the adresses
people[index] = new Faculty();
fArray[facultyCount] = new Faculty();
// Set the info
personInfo(people[index]);
employeeInfo((CollegeEmployee)people[index]);
facultyInfo((Faculty)people[index]);
System.out.println("\n");
// increment the counts
facultyCount++;
index++;
}
System.out.print("Please enter the next person type (S, C, F, " +
"or Q): ");
type = keyboard.next();
}
// Displays error message then closes program if there was overflow
if ((facultyCount > 3) || (studentCount > 7) || (employeeCount > 4))
{
System.out.println("Too much data for one type of person. Goodbye.");
System.exit(0);
}
// Print the data for all of the college employees
System.out.println("\n\n");
System.out.println("THE COLLEGE EMPLOYEES");
for (int i = 0; i < employeeCount; i++)
{
System.out.println(cArray[i]);
System.out.println("\n");
}
// Determines if not all of the personS type was filled
if (employeeCount != 4)
{
System.out.println("There are " + (4 - employeeCount) + " employees"
+ " who are not recorded.");
}
// Print the data for all of the faculty
System.out.println("\n\n");
System.out.println("THE FACULTY");
for (int i = 0; i < facultyCount; i++)
{
System.out.println(fArray[i]);
System.out.println("\n");
}
// Determines if not all of the person type was filled
if (facultyCount != 3)
{
System.out.println("There are " + (3 - facultyCount) + " faculty "
+ "members who are not recorded.");
}
// Print the data for all of the students
System.out.println("\n\n");
System.out.println("THE STUDENTS");
for (int i = 0; i < studentCount; i++)
{
System.out.println(sArray[i]);
System.out.println("\n");
}
// Determines if not all of the person type was filled
if (studentCount != 7)
{
System.out.println("There are " + (7 - studentCount) + " students "
+ "who are not recorded.");
}
}
// prompts the user for data input that is universal to all the people
public static void personInfo(Person p)
{
Scanner keyboard = new Scanner(System.in);
System.out.print("First name: ");
String fName = keyboard.nextLine();
System.out.println();
System.out.print("Last name: ");
String lName = keyboard.nextLine();
System.out.println();
System.out.print("Street address: ");
String address = keyboard.nextLine();
System.out.println();
System.out.print("Zipcode: ");
String zipcode = keyboard.nextLine();
System.out.println();
System.out.print("Phone number: ");
String phone = keyboard.nextLine();
System.out.println();
// Sets the data accordingly
p.setFirstName(fName);
p.setLastName(lName);
p.setAddress(address);
p.setZipcode(zipcode);
p.setPhone(phone);
}
// Sets the data for student fields
public static void studentInfo(Student s)
{
Scanner keyboard = new Scanner(System.in);
System.out.print("Grade point average: ");
double gpa = keyboard.nextDouble();
System.out.println();
System.out.print("Major: ");
String major = keyboard.next();
System.out.println();
// Set the data accordingly
s.setGpa(gpa);
s.setMajor(major);
}
// Sets the data for Faculty fields
public static void facultyInfo(Faculty f)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Is the faculty tenured (\"yes\" or \"no)\"?");
String tenured = keyboard.next();
// set the data accordingly
switch (tenured)
{
case "yes" :
f.setTenured(true);
break;
case "no" :
f.setTenured(false);
break;
}
}
// Sets the info for CollegeEmployee fields
public static void employeeInfo(CollegeEmployee c)
{
Scanner keyboard = new Scanner(System.in);
System.out.print("Social security number: ");
String socialSecurity = keyboard.next();
System.out.println();
System.out.print("Salary: ");
String salary = keyboard.next();
System.out.println();
System.out.print("Department name: ");
String department = keyboard.next();
System.out.println();
// Set the data accordingly
c.setSocialSecurity(socialSecurity);
c.setSalary(salary);
c.setDepartment(department);
}
}
答案 0 :(得分:1)
由于我没有你的Person类实现,我只是忽略了Person类。这是我的代码:
public class Student
{
// declare fields that are not in Person
private String major = "";
private double gpa;
// Declare accessor and mutator methods for the fields
public String getMajor()
{
return major;
}
public void setMajor(String major)
{
this.major = major;
}
public double getGpa()
{
return gpa;
}
public void setGpa(double gpa)
{
this.gpa = gpa;
}
// Create a toString method that overrides the one in Person
public String toString()
{
String str = "Grade point average: " + getGpa() +
"...Major: " + getMajor();
return str;
}
public static void main(String [] args)
{
Student s = new Student();
s.setGpa(8.88);
s.setMajor("CS");
System.out.println(s);
}
}
这是输出:
平均成绩:8.88 ...专业:CS
在打印之前,您可能没有设置对象的字段。
答案 1 :(得分:1)
您正在为每个条目创建两个Student()实例。您只更新people数组中的那个而不是学生数组。
people[index] = new Student();
sArray[studentCount] = new Student();
假设您确实想将学生存储在两个阵列中,请将其更改为:
Student student = new Student();
people[index] = student;
sArray[studentCount] = student;
答案 2 :(得分:0)
您可以添加包含所有字段的构造函数
public class Person {
private String firstName = "";
private String lastName = "";
private String address = "";
private String zipcode = "";
private String phone = "";
public Person(String firstName,
String lastName,
String address,
String zipcode,
String phone) {
this. firstName = firstName;
this.lastName = lastName;
this.address = address;
this.zipcose = zipcode;
this.phone = phone;
}
}
main
public static void main(String[] args){
Person person = new Person(
"John", "Smith", "444 Some Lame St", "90210", "510-555-5555");
System.out.println(person);
}
答案 3 :(得分:0)
我认为你不应该叫那个人的吸气者在学生身上做toString
但应该做的事情如下:
return super.toString() + "... Grade Point Average: " + this.gpa +
等Student
不应该知道Person
想要显示为字符串的信息。它应该只返回Person
想要显示的内容以及Student
想要显示的内容。
话虽如此,我同意其他答案,说明你实际上并未在Student
中设置任何内容。你可以发表你的主要方法吗?
Person
数组的people
与您插入c/s/fArray
的对象不同。因此,当您打印c/s/fArray
时,实际上是在打印未初始化的对象。如果要保留对象的副本,则应执行以下操作:
people[index] = new Faculty();
fArray[facultyCount] = people[index];
然后people[index]
和fArray[facultyCount]
都是相同的。
同样,您不应该使用静态方法来初始化对象,但应该在这些对象的构造函数中执行此操作。