使用 ArrayList<Object> 特性从方法中存储数组
Using the ArrayList<Object> feature to store Array from Method
我相信我已经完成了大约 95%,唯一阻止我的是我必须将 printInfo() 的结果打印到一个元素中。
程序正在收集输入,输入基于项目是否为植物。输入输入后,setter 为 运行,我想访问
例如,来自 plant 的 printInfo(),并将其作为一个元素存储在 myGarden 数组中。
然后我将调用一个打印对象数组元素的方法。这些元素将是来自植物和花朵的 printInfo() 的信息 class.
update: 我去掉了casting,简单的改成了,也修改了方法。删除打印命令,因为它对我们正在尝试做的事情不起作用,而是分配 myGarden.get(i) 来调用元素。
package labpackage;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class PlantArrayListExample {
// TODO: Define a printArrayList method that prints an ArrayList of plant (or flower) objects
public static void printArrayList(ArrayList<Plant> myGarden) {
for (int i = 0; i < myGarden.size(); ++i) {
myGarden.get(i).printInfo();
}
}
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
String input;
// TODO: Declare an ArrayList called myGarden that can hold object of type plant
ArrayList<Object> myGarden = new ArrayList<>();
// TODO: Declare variables - plantName, plantCost, colorOfFlowers, isAnnual
String plantName;
String plantCost;
String colorOffFlowers;
boolean isAnnual;
input = scnr.next();
while(!input.equals("-1")){
// TODO: Check if input is a plant or flower
if (input.contains("plant")) {
Plant plant = new Plant();
plantName = scnr.next();
plantCost = scnr.next();
plant.setPlantName(plantName);
plant.setPlantCost(plantCost);
System.out.println();
myGarden.add(plant);
// missing code to add print result as an element
}
if (!input.contains("plant")) {
Flower flower = new Flower();
plantName = scnr.next();
plantCost = scnr.next();
isAnnual = scnr.nextBoolean();
colorOffFlowers = scnr.next();
flower.setPlantName(plantName);
flower.setPlantCost(plantCost);
flower.setPlantType(isAnnual);
flower.setColorOfFlowers(colorOffFlowers);
System.out.println();
// missing code to add print result as an element
myGarden.add(flower);
}
input = scnr.next();
}
// TODO: Call the method printArrayList to print myGarden
printArrayList(myGarden);
}
}
package labpackage;
public class Plant {
protected String plantName;
protected String plantCost;
public void setPlantName(String userPlantName) {
plantName = userPlantName;
}
public String getPlantName() {
return plantName;
}
public void setPlantCost(String userPlantCost) {
plantCost = userPlantCost;
}
public String getPlantCost() {
return plantCost;
}
public void printInfo() {
System.out.println("Plant Information: ");
System.out.println(" Plant name: " + plantName);
System.out.println(" Cost: " + plantCost);
}
}
package labpackage;
public class Flower extends Plant {
private boolean isAnnual;
private String colorOfFlowers;
public void setPlantType(boolean userIsAnnual) {
isAnnual = userIsAnnual;
}
public boolean getPlantType(){
return isAnnual;
}
public void setColorOfFlowers(String userColorOfFlowers) {
colorOfFlowers = userColorOfFlowers;
}
public String getColorOfFlowers(){
return colorOfFlowers;
}
@Override
public void printInfo(){
System.out.println("Plant Information: ");
System.out.println(" Plant name: " + plantName);
System.out.println(" Cost: " + plantCost);
System.out.println(" Annual: " + isAnnual);
System.out.println(" Color of flowers: " + colorOfFlowers);
}
}
打印植物或花卉信息更新 printArrayList 方法。您不能将 returns 无效的方法作为参数传递给“System.out.println”,您必须直接调用该方法,因为它 returns 无效。
public static void printArrayList(ArrayList<Plant> objList) {
for (i = 0; i < objList.size(); ++i) {
objList.get(i).printInfo();
}
}
您必须缩小可能类型的范围,而不是使用 Object
作为集合中的元素类型(这是最通用的)。因为你在这里有很好的层次结构,你可以使用 base class。替换
ArrayList <Object> myGarden = new ArrayList();
和
List<Plant> myGarden = new ArrayList<>();
并且您将能够调用 printInfo()
方法,因为集合中的所有对象肯定至少是 Plant
或 class 的任何子 class意味着他们都有 printInfo()
方法。
public static void printArrayList(Collection<Plant> plants) {
for (Plant p : plants) {
p.printInfo();
}
}
或更短使用 Java 流 API
myGarden.stream().forEach(Plant::printInfo);
希望对您有所帮助!
我相信我已经完成了大约 95%,唯一阻止我的是我必须将 printInfo() 的结果打印到一个元素中。
程序正在收集输入,输入基于项目是否为植物。输入输入后,setter 为 运行,我想访问 例如,来自 plant 的 printInfo(),并将其作为一个元素存储在 myGarden 数组中。
然后我将调用一个打印对象数组元素的方法。这些元素将是来自植物和花朵的 printInfo() 的信息 class.
update: 我去掉了casting,简单的改成了,也修改了方法。删除打印命令,因为它对我们正在尝试做的事情不起作用,而是分配 myGarden.get(i) 来调用元素。
package labpackage;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class PlantArrayListExample {
// TODO: Define a printArrayList method that prints an ArrayList of plant (or flower) objects
public static void printArrayList(ArrayList<Plant> myGarden) {
for (int i = 0; i < myGarden.size(); ++i) {
myGarden.get(i).printInfo();
}
}
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
String input;
// TODO: Declare an ArrayList called myGarden that can hold object of type plant
ArrayList<Object> myGarden = new ArrayList<>();
// TODO: Declare variables - plantName, plantCost, colorOfFlowers, isAnnual
String plantName;
String plantCost;
String colorOffFlowers;
boolean isAnnual;
input = scnr.next();
while(!input.equals("-1")){
// TODO: Check if input is a plant or flower
if (input.contains("plant")) {
Plant plant = new Plant();
plantName = scnr.next();
plantCost = scnr.next();
plant.setPlantName(plantName);
plant.setPlantCost(plantCost);
System.out.println();
myGarden.add(plant);
// missing code to add print result as an element
}
if (!input.contains("plant")) {
Flower flower = new Flower();
plantName = scnr.next();
plantCost = scnr.next();
isAnnual = scnr.nextBoolean();
colorOffFlowers = scnr.next();
flower.setPlantName(plantName);
flower.setPlantCost(plantCost);
flower.setPlantType(isAnnual);
flower.setColorOfFlowers(colorOffFlowers);
System.out.println();
// missing code to add print result as an element
myGarden.add(flower);
}
input = scnr.next();
}
// TODO: Call the method printArrayList to print myGarden
printArrayList(myGarden);
}
}
package labpackage;
public class Plant {
protected String plantName;
protected String plantCost;
public void setPlantName(String userPlantName) {
plantName = userPlantName;
}
public String getPlantName() {
return plantName;
}
public void setPlantCost(String userPlantCost) {
plantCost = userPlantCost;
}
public String getPlantCost() {
return plantCost;
}
public void printInfo() {
System.out.println("Plant Information: ");
System.out.println(" Plant name: " + plantName);
System.out.println(" Cost: " + plantCost);
}
}
package labpackage;
public class Flower extends Plant {
private boolean isAnnual;
private String colorOfFlowers;
public void setPlantType(boolean userIsAnnual) {
isAnnual = userIsAnnual;
}
public boolean getPlantType(){
return isAnnual;
}
public void setColorOfFlowers(String userColorOfFlowers) {
colorOfFlowers = userColorOfFlowers;
}
public String getColorOfFlowers(){
return colorOfFlowers;
}
@Override
public void printInfo(){
System.out.println("Plant Information: ");
System.out.println(" Plant name: " + plantName);
System.out.println(" Cost: " + plantCost);
System.out.println(" Annual: " + isAnnual);
System.out.println(" Color of flowers: " + colorOfFlowers);
}
}
打印植物或花卉信息更新 printArrayList 方法。您不能将 returns 无效的方法作为参数传递给“System.out.println”,您必须直接调用该方法,因为它 returns 无效。
public static void printArrayList(ArrayList<Plant> objList) {
for (i = 0; i < objList.size(); ++i) {
objList.get(i).printInfo();
}
}
您必须缩小可能类型的范围,而不是使用 Object
作为集合中的元素类型(这是最通用的)。因为你在这里有很好的层次结构,你可以使用 base class。替换
ArrayList <Object> myGarden = new ArrayList();
和
List<Plant> myGarden = new ArrayList<>();
并且您将能够调用 printInfo()
方法,因为集合中的所有对象肯定至少是 Plant
或 class 的任何子 class意味着他们都有 printInfo()
方法。
public static void printArrayList(Collection<Plant> plants) {
for (Plant p : plants) {
p.printInfo();
}
}
或更短使用 Java 流 API
myGarden.stream().forEach(Plant::printInfo);
希望对您有所帮助!