【发布时间】:2015-07-11 15:26:27
【问题描述】:
在我的任务中,我要创建两个类:Entry 和 Roster。这两个类之间有一个链接,应该使用以下说明创建方法:
参赛作品
数据--> 一个 Entry 具有三个私有实例变量:firstName、lastName 和grade。 名字都是字符串,成绩是整数。
Methods-->(不要添加其他方法) -Entry (String firstIn, String lastIn, int gradeIn) 构造函数
-String toString() 返回一个用制表符分隔名称和等级的字符串。 将名称格式化为last, first
-boolean equals(Entry) 如果 Entry 参数中的名称匹配,则返回 true 当前对象中的名称。如果不匹配则返回 false。
-int getGrade() 返回对象中的等级值
名册
Data--> 一个 Roster 有一个 Entry 对象的 ArrayList 和一个常量 NOT_FOUND。你 必须为此分配使用 ArrayList。
方法(不要添加其他方法-->
-Roster() 实例化ArrayList。 ArrayList 初始化为空。
-void insert (Entry) 使用私有搜索方法搜索列表(如下)。如果 该条目不在名册中,添加它使其成为列表中的最后一个。如果名字已经在名册中,什么也不做。
-void delete (Entry) 使用私有搜索方法搜索列表(如下)。如果 有匹配的条目,删除该条目。如果没有匹配,请执行 没有。顺序必须保持不变。
-void printAll () 打印名册中的所有条目,每个条目都在自己的行中。
-double average() 计算名册中的平均成绩为double
-private int search (Entry) 实现线性搜索算法以处理Entry 的ArrayList。在 Entry 中使用 equals 方法 类来确定是否存在匹配。等式中不使用等级 查看。注意:使用 for 循环或中断循环的解决方案不是 可以接受。
这是我编写的 Entry 和 Roster 类:
public class Entry {
private String firstName;
private String lastName;
private int grade;
public Entry(String firstIn, String lastIn, int gradeIn) {
firstName = firstIn;
lastName = lastIn;
grade = gradeIn;
}
public String toString() {
return (lastName + ", " + firstName + "\t" + grade);
}
public boolean equals(Entry entryIn) {
if (firstName.equals(entryIn.firstName)
&& lastName.equals(entryIn.lastName)) {
return true;
}
else {
return false;
}
}
public int getGrade(){
return grade;
}
}
这是我的花名册课程
import java.util.ArrayList;
public class Roster {
private static ArrayList<Entry> entries;
private final int NOT_FOUND = -1;
public Roster() {
entries = new ArrayList<Entry>();
}
public void insert(Entry entryIn) {
if (search(entryIn) > -1) {
entries.add(entryIn);
}
else {
}
}
public void delete(Entry entryIn) {
int size = entries.size();
if (search(entryIn) > -1) {
entries.remove(search(entryIn));
size--;
}
}
public void printAll() {
for (Entry entryIn : entries) {
System.out.println(entryIn);
}
}
public static double average() {
double average = 0.0;
for (int i = 1; i < entries.size(); i++) {
average += entries.get(i).getGrade();
}
return average/entries.size();
}
private int search(Entry entryIn) {
boolean found = false;
int index = 0;
while (index < entries.size() && !found) {
if(entries.get(index).equals(entryIn)) {
found = true;
}
else {
index++;
}
if (index == entries.size()) {
index = -1;
}
return index;
}
return index;
}
}
这是给我的主要方法:
//package project7;
import java.util.*;
public class Project7 {
/*
* Eight test cases for Roster
*/
/* main method to control tests to be performed.
*
*/
public static void main (String [] args)
{
char ch;
boolean end = false;
do
{
ch = getCommand();
switch (ch)
{
case '1' : test1();
break;
case '2' : test2();
break;
case '3' : test3();
break;
case '4' : test4();
break;
case '5' : test5();
break;
case '6' : test6();
break;
case '7' : test7();
break;
case '0' : end = true;
break;
}
}
while (!end);
System.out.println ("Program complete");
}
/* prompt the user to enter a test number and return it as a character
*
*/
static char getCommand ()
{
final Scanner input = new Scanner (System.in);
char command;
boolean valid;
do {
System.out.println ();
System.out.print ("Enter test number (1..7) (0 to stop): ");
String answer = input.next();
command = answer.charAt(0);
valid = command >= '0' && command <= '7';
if (!valid)
System.out.println ("Entry not valid, enter again");
} while (!valid);
return command;
}
/* test 1 - empty book
*/
static void test1()
{
System.out.println ("Test 1: Entry");
Entry entry1 = new Entry ("Joe", "Smith", 100);
System.out.println ("Expecting: Smith, Joe 100");
System.out.println ("Result: " + entry1);
System.out.println ();
System.out.println ("Expecting: true");
System.out.println ("Result: " + entry1.equals(entry1));
System.out.println ();
System.out.println ("Expecting: false");
Entry entry2 = new Entry ("Bill", "Jones", 0);
System.out.println ("Result: " + entry1.equals(entry2));
System.out.println ();
System.out.println ("Expecting: 100");
System.out.println (entry1.getGrade());
}
/* test 2 - empty Roster
*/
static void test2()
{
System.out.println ("Test2: empty");
System.out.println ();
Roster book = new Roster ();
System.out.println ("Expecting nothing");
book.printAll();
System.out.println ("Expecting 0.0");
System.out.println (book.average());
System.out.println ();
}
/* test 3 - insert and search
*/
static void test3()
{
System.out.println ("Test3: insert ");
System.out.println ();
Roster list = new Roster();
Entry temp = new Entry ("John", "Smith", 99);
list.insert(temp);
System.out.println ("Expecting Smith, John 99");
list.printAll();
System.out.println ();
list.insert (new Entry ("Tom", "Jones", 78));
list.insert (new Entry ("Fred", "Flintstone", 55));
list.insert(new Entry ("Jill", "St. John", 79));
list.insert(new Entry ("Jim", "Smith", 88));
System.out.println ("Expecting 5 entries");
list.printAll();
System.out.println ();
System.out.println ("Expecting 79.8");
System.out.println (list.average());
}
/* test 4 - insert with duplicates
*/
static void test4()
{
System.out.println ("Test4: Duplicate Entries ");
System.out.println ();
Roster book = new Roster();
book.insert(new Entry ("John", "Bob", 77));
book.insert(new Entry ("Jim","Bob", 89));
book.insert(new Entry ("John", "Bob", 89));
book.insert(new Entry ("Jim","Bob", 55));
System.out.println ("Expecting 2 entries");
book.printAll();
System.out.println ();
}
/* test 5 - deleting
*/
static void test5()
{
System.out.println ("Test5: Deleting");
System.out.println ();
Roster list = new Roster ();
list.insert(new Entry ("John", "Johnson", 77));
list.insert(new Entry ("Tom","Thompson", 99));
list.insert(new Entry ("Jeff", "Jefferson", 44));
list.insert(new Entry ("Fred", "Fredrickson", 91));
list.insert(new Entry ("Tina", "Tina", 95));
System.out.println ("Expecting 5 entries");
list.printAll();
System.out.println ();
System.out.println ("Expecting 4 entries");
list.delete(new Entry ("John", "Johnson", 0));
list.printAll();
System.out.println ();
System.out.println ("Expecting 3 entries");
list.delete(new Entry ("Tina", "Tina", 0));
list.printAll();
System.out.println ();
System.out.println ("Expecting 2 entries");
list.delete(new Entry ("Fred", "Fredrickson", 0));
list.printAll();
System.out.println ();
System.out.println ("Expecting 1 entry");
list.delete(new Entry ("Tom", "Thompson", 0));
list.printAll();
System.out.println ();
System.out.println ("Expecting 0 entries");
list.delete(new Entry ("Jeff", "Jefferson", 0));
list.printAll();
System.out.println ();
}
/* test 6 - delete duplicates
*/
static void test6() {
System.out.println ("Test6: delete duplicates");
System.out.println ();
// create new book and fill
Roster list = new Roster ();
list.insert(new Entry ("John", "Johnson", 77));
list.insert(new Entry ("Tom","Thompson", 99));
list.insert(new Entry ("Jeff", "Jefferson", 44));
list.insert(new Entry ("Fred", "Fredrickson", 91));
list.insert(new Entry ("Tina", "Tina", 95));
System.out.println ("Expecting all");
list.printAll();
System.out.println ();
System.out.println ("Expecting 4 entries");
list.delete(new Entry ("Jeff", "Jefferson", 0));
list.printAll();
System.out.println ();
System.out.println ("Expecting 4 entries");
list.delete(new Entry ("Jeff", "Jefferson", 0));
list.printAll();
System.out.println ();
}
/* test 7- empty and fill
*/
static void test7 () {
Roster list = new Roster ();
list.insert(new Entry ("John", "Johnson", 77));
list.insert(new Entry ("Tom","Thompson", 99));
list.insert(new Entry ("Jeff", "Jefferson", 44));
System.out.println ("Expecting 3 entries");
list.printAll();
System.out.println ();
list.delete(new Entry ("John", "Johnson", 0));
list.delete(new Entry ("Tom", "Thompson", 0));
list.delete(new Entry ("Jeff", "Jefferson", 0));
System.out.println ("Expecting 0 entries");
list.printAll();
System.out.println ();
list.insert(new Entry ("John", "Johnson", 87));
list.insert(new Entry ("Tom","Thompson", 76));
list.insert(new Entry ("Jeff", "Jefferson", 83));
System.out.println ("Expecting 3 entries");
list.printAll();
System.out.println ();
}
}
代码运行但没有给出预期的输出。我很难在搜索方法中对 ArrayList 进行线性搜索,我认为这些错误会渗透到插入/删除方法中。如果有人对如何解决这些方法有建议,我将不胜感激。我对编程很陌生。谢谢!
【问题讨论】:
-
1) 有哪些错误? 2)做自己的功课。我们不是来为你做任务的。但是,如果您卡在某个特定位置,那么您应该问 - 不要这样问......
-
正如我在底部所说,我在使用 Roster 类时遇到了问题,我相信这是因为我对搜索方法感到困惑
-
我评论的第一点是什么?有哪些错误?我肯定不会复制/粘贴大量编码转储并为您找到错误。告诉我们错误是什么,并仅包括所需的代码。请阅读How to Ask
-
当我运行代码时,在 main 方法的测试 3 中开始出现逻辑错误。只有“临时”对象被保存到数组列表中,其他整体没有被打印,这个错误在其他测试中也持续存在。我不知道我在 insert() 方法中的逻辑哪里出错了,其他条目没有被添加。类似地,使用 delete() 方法,只有第一个副本被删除,而其他副本保留。如果您对我出错的地方有任何想法,我将不胜感激。很抱歉我的不当礼节让你很不爽。
-
与其说是个人的礼仪,不如说是我们每天都会弹出数百个这样的问题——如果提问者只需花 3 分钟时间阅读How to Ask,问题的质量就会大大提高更高。为了将来参考,请在您的问题中包括预期的输出和收到的输出。正如 Ola 所提到的,我们中的一些人没有时间复制/粘贴您的代码并运行它。此外,调试器通常对逻辑问题非常有用。如果我表现得粗鲁/不高兴,我深表歉意——这不是我的本意。
标签: java object methods arraylist