我需要将相同的数据发送到多个班级。我的教授给了我们一个半完成的驱动文件,他使用相同的引用来引用2个不同的类,这样你就可以在一个方法调用中将相同的数据发送到两个类。但是这会导致错误。我一直试图让它工作,即使给他们不同的参考和调用方法两次但它仍然无法工作。它还说它找不到符号“SortedStringListReferenceBased_solution”,这是方法的签名。请帮忙。
public class SortedStringListDriver
{
public static void main(String [] args)
{
SortedStringListArrayBased myGroceryList = new SortedStringListArrayBased();
SortedStringListReferenceBased myGroceryList = new SortedStringListReferenceBased();
myGroceryList.add("milk");
myGroceryList.add("eggs");
myGroceryList.add("butter");
myGroceryList.add("pecans");
myGroceryList.add("apples");
myGroceryList.add("bread");
myGroceryList.add("chicken");
myGroceryList.add("black beans");
myGroceryList.add("rice");
myGroceryList.add("sausage");
myGroceryList.add("flour");
printList(myGroceryList);//print out original List
System.out.print("numItems for array based list is now: "+myGroceryList1.size()+"\n\n");
adding(myGroceryList, "juice");
removing(myGroceryList, "juice");
adding(myGroceryList, "banana");
removing(myGroceryList, "sausage");
removing(myGroceryList, "cheese");
}
public static void adding(SortedStringListReferenceBased_solution myList, String str)
{
System.out.println("Adding " + str + " ...");
myList.add(str); //add juice
printList(myList);
System.out.print("numItems for array based list is now: " + myList.size() + "\n\n");
}
public static void removing(SortedStringListReferenceBased_solution myList, String str)
{
System.out.println("Removing " + str + " ...");
myList.remove(str);
printList(myList);
System.out.print("numItems is now: " + myList.size() + "\n\n");
}
public static void printList(SortedStringListReferenceBased_solution myList)
{
//method prints a list, numbering the values, e.g, "0. milk" .... "4. juice".... etc.
for (int index = 0; index < myList.size(); index++)
{
System.out.printf("%2d. %s\n",index, (String) myList.get(index));
}
}
}
答案 0 :(得分:0)
在查看作业后,我认为这就是所需要的:
您需要设置一个可以 SortedStringListArrayBased
或SortedStringListReferenceBased
的变量。但这两个都实现SortedStringListInterface
,因此您的变量将被声明为SortedStringListInterface
。您可以将变量分配给其中一个。
SortedStringListInterface myGroceryList;
if (iWantAnArray) // I have no idea how to determine this
myGroceryList = new SortedStringListArrayBased();
else
myGroceryList = new SortedStringListReferenceBased();
请注意,当您将myGroceryList
声明为SortedStringListInterface
时,这意味着该变量可以引用实现该接口的任何对象,无论它是什么类。这可能是您主题专栏中问题的答案。
完成后,您可以添加商品:
myGroceryList.add("milk");
myGroceryList.add("eggs");
...
它会调用add
或SortedStringListArrayBased
的{{1}}方法,具体取决于您为SortedStringListReferenceBased
设置的对象类型。这是多态性 - 它在运行时根据实际类选择实际发生myGroceryList
方法。
此add
来电(以及其他来电)列表只应在您的计划中出现一次。但是如果你想要两次,每种类型的列表一次,你可以将它放在主程序调用两次的方法中。或者您可以使列表类型取决于add
中的参数,并运行程序两次。我不知道教授想要什么。但是那部分可以很容易地改变。
答案 1 :(得分:0)
基本上,UML图表显示您有一个接口,然后是两个实现接口的类,由箭头指示。一个接口让你说“嘿,实现这个接口的东西将有这些方法,我将在接口代码中留空”接口是一种方法,使空的待填充实现类(es )' 方法。所以你的教授给你了界面,由你来决定每个课程应该“添加”或“删除”某些内容?如果椅子实现了可移动的界面,它应该如何移动?那取决于实现接口的类。如果实现它的类是“WheeledChair”,那么move()可能是“推动darn chair”,但是如果它实现了可移动界面,那么“WoodLeggedChair”可能就像“捡起它,所以你不要刮掉地板!”因此,您需要决定如何在每个方法中实现这些方法。这主要是一个接口 - 当你知道实现接口的东西可能需要以不同于彼此的方式处理数据时,定义一组空的方法或行为。这样您就可以确保实现方法,但是将实现的细节留给实现类
答案 2 :(得分:0)
现在可以修改的代码。不完全是我想做的,但它足够接近。
public class SortedStringListDriver
{
public static void main(String [] args)
{
SortedStringListArrayBased myGroceryList1 = new SortedStringListArrayBased();
SortedStringListReferenceBased myGroceryList2 = new SortedStringListReferenceBased();
myGroceryList1.add("milk");
myGroceryList1.add("eggs");
myGroceryList1.add("butter");
myGroceryList1.add("pecans");
myGroceryList1.add("apples");
myGroceryList1.add("bread");
myGroceryList1.add("chicken");
myGroceryList1.add("black beans");
myGroceryList1.add("rice");
myGroceryList1.add("sausage");
myGroceryList1.add("flour");
myGroceryList2.add("milk");
myGroceryList2.add("eggs");
myGroceryList2.add("butter");
myGroceryList2.add("pecans");
myGroceryList2.add("apples");
myGroceryList2.add("bread");
myGroceryList2.add("chicken");
myGroceryList2.add("black beans");
myGroceryList2.add("rice");
myGroceryList2.add("sausage");
myGroceryList2.add("flour");
printList(myGroceryList1);
printList(myGroceryList2);//print out original List
System.out.print("numItems for array based list is now: " + myGroceryList1.size() + "\n");
System.out.print("numItems for referenced based list is now: " + myGroceryList2.size() + "\n\n");
adding(myGroceryList1, "juice");
adding(myGroceryList2, "juice");
removing(myGroceryList1, "juice");
removing(myGroceryList2, "juice");
adding(myGroceryList1, "banana");
adding(myGroceryList2, "banana");
removing(myGroceryList1, "sausage");
removing(myGroceryList2, "sausage");
removing(myGroceryList1, "cheese");
removing(myGroceryList2, "cheese");
}
public static void adding(SortedStringListInterface myList, String str)
{
System.out.println("Adding " + str + " ...");
myList.add(str); //add juice
printList(myList);
System.out.print("numItems for array based list is now: " + myList.size() + "\n\n");
}
public static void removing(SortedStringListInterface myList, String str)
{
System.out.println("Removing " + str + " ...");
myList.remove(str);
printList(myList);
System.out.print("numItems is now: " + myList.size() + "\n\n");
}
public static void printList(SortedStringListInterface myList)
{
//method prints a list, numbering the values, e.g, "0. milk" .... "4. juice".... etc.
for (int index = 0; index < myList.size(); index++)
{
System.out.printf("%2d. %s\n\n",index, (String) myList.get(index));
}
}
}