所以现在我有几个课程:
档案1
package simplestart;
import simplegui.SimpleGUI;
public class Point {
int x, y;
public Point(int a, int b){
this.x = a;
this.y = b;
}
public void drawLine(Object data, SimpleGUI sg){
Node current = new Node(data);
}
public int getX(){
return x;
}
@Override
public String toString(){
return(x + " " + y);
}
}
文件2
package simplestart;
import simplegui.SimpleGUI;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class SimpleStart {
public static void main(String[] args){
int x, y;
SimpleGUI sg = new SimpleGUI();
sg.setTitle("Shape Abstraction");
sg.centerGUIonScreen();
LinkedList l1 = new LinkedList();
File fl = new File("shapelist.txt");
Scanner scan = new Scanner(fl);
while(scan.hasNext()){
x = scan.nextInt();
y = scan.nextInt();
Point p = new Point(x, y);
l1.insertFirst(p);
}
l1.traverseList(l1, sg);
l1.abstractList(l1, sg);
}
}
文件3
package simplestart;
public class Node {
Object data;
Node next;
public Node(Object data){
this.data = data;
}
}
档案4
package simplestart;
import simplegui.SimpleGUI;
public class LinkedList {
Node START;
public LinkedList(){
START = null;
}
public void insertFirst(Object data){
Node n = new Node(data);
n.next = START;
START = n;
}
public void traverseList(Object data, SimpleGUI sg){
Node current = START;
int x, y, ex, ey;
while(current != null){
//This is where I'm trying to pull the data from Class Point
//The error that appears is can't find symbol int x
x = current.data.x;
y = current.data.y;
ex = current.next.data.x;
ey = current.next.data.y;
sg.drawLine(x, y, ex, ey);
//toString() is an override method in Class Point
System.out.println(current.data);
//However, this doesn't work... which I don't get cause it's also a method in Class Point like toString()
current = current.next;
}
}
public void abstractList(Object data, SimpleGUI sg){
Node current = START;
Node temp = START;
current = current.next;
int lp, pr, rl, s;
while(current.next != null){
lp = current.next.data.x current.data.x;
pr = current.next.next.data.x current.next.data.x;
rl = current.next.next.data.x current.data.x;
s = lp + pr rl;
current.next.data = s;
temp = current.next;
current = current.next.next;
}
}
}
基本上我在文件1中指出了一点,将这些点以文件3中的节点形式添加到文件2中的链接列表中,并在文件4中迭代它们。但是,当current.data应该是每个节点时有点,我无法访问方法“getX()”甚至current.data.x。我很好奇为什么会这样,并且不能为我的生活弄清楚。任何帮助都是非常必要的!
答案 0 :(得分:1)
Node中的数据类型为Object,它不会在任何地方输入类型为Point。这是Object类中的方法toString(),但没有getX()方法。
答案 1 :(得分:1)
您无法访问数据点的原因是,data
的{{1}}属性属于Node
类型。
如果您想获得该属性,例如
将属性转换为Object
Point
介绍您自己的((Point)current.data).x
类,该类具有Node
类型的属性(也可以是通用的)
Andy指出,我也强烈建议您实现自己的节点类。这样做有一个好处,那就是你将拥有语言支持而且你不需要进行转换,如果你的节点数据类型发生变化,你就不会遇到运行时异常 - 编译器会告诉你。
答案 2 :(得分:0)
您没有在/**
* Class to get the data for the UI
*/
package com.shop.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import com.shop.data.Item;
import com.shop.data.Orders;
import com.shop.hibernate.application.ManageOrder;
/**
* @author svalsalan
*
*/
@ManagedBean(name = "itemDataBean")
@SessionScoped
public class ItemDataBean {
private List<Item> MenItems = new ArrayList<Item>();
private List<Item> WomenItems = new ArrayList<Item>();
private List<Item> Items = new ArrayList<Item>();
public List<String> selectedItems = new ArrayList<String>();
public List<String> selectedMenItems = new ArrayList<String>();
public List<String> selectedWomenItems = new ArrayList<String>();
public List<Item> userselectedItems = new ArrayList<Item>();
// public List<Item> selectedDataItems = new ArrayList<Item>();
public Item selectedDataitem;
// Map<Item, Integer> Quantity = new HashMap<Item, Integer>();
List<Item> Cartlist = new ArrayList<Item>();
Item Shirt;
public List<Item> getItems() {
Items = new ArrayList<Item>();
// set an initial value for the price
// Create items
Shirt = new Item(1, "Shirt", 100, "S");
Shirt.setItemid(1);
Item tshirt = new Item(1, "T-Shirt", 200, "M");
tshirt.setItemid(2);
Item jean = new Item(1, "Jeans", 300, "L");
jean.setItemid(3);
Item Dress = new Item(0, "Dress", 300, "S");
Dress.setItemid(4);
Item Tops = new Item(0, "Tops", 100, "S");
Tops.setItemid(5);
Item skirt = new Item(0, "Skirt", 200, "S");
skirt.setItemid(6);
// Add them to the list
Items.add(0, Shirt);
Items.add(1, tshirt);
Items.add(2, jean);
Items.add(3, Dress);
Items.add(4, Tops);
Items.add(5, skirt);
return Items;
}
/**
* @return the menItems
*/
public List<Item> getMenItems() {
MenItems.clear();
getItems();
for (int i = 0; i < Items.size(); i++) {
if (Items.get(i).getCategoryId() == 1) {
MenItems.add(Items.get(i));
}
}
return MenItems;
}
/**
* @return the womenItems
*/
public List<Item> getWomenItems() {
WomenItems.clear();
getItems();
for (int i = 0; i < Items.size(); i++) {
if (Items.get(i).getCategoryId() != 1) {
WomenItems.add(Items.get(i));
}
}
return WomenItems;
}
/**
* @param menItems
* the menItems to set
*/
public void setMenItems(List<Item> menItems) {
MenItems = menItems;
}
/**
* @param womenItems
* the womenItems to set
*/
public void setWomenItems(List<Item> womenItems) {
WomenItems = womenItems;
}
/**
* @return the items
*/
/**
* @param items
* the items to set
*/
public void setItems(List<Item> items) {
Items = items;
}
public List<String> getSelectedMenItems() {
return selectedMenItems;
}
/**
* @return the selectedWomenItems
*/
public List<String> getSelectedWomenItems() {
return selectedWomenItems;
}
/**
* @param selectedMenItems
* the selectedMenItems to set
*/
public void setSelectedMenItems(List<String> selectedMenItems) {
this.selectedMenItems = selectedMenItems;
System.out.println(selectedMenItems);
}
/**
* @param selectedWomenItems
* the selectedWomenItems to set
*/
public void setSelectedWomenItems(List<String> selectedWomenItems) {
this.selectedWomenItems = selectedWomenItems;
}
/**
* @return the selectedItems
*/
public List<String> getSelectedItems() {
this.selectedItems.clear();
selectedItems.addAll(getSelectedWomenItems());
selectedItems.addAll(selectedMenItems);
return selectedItems;
}
/**
* @param selectedItems
* the selectedItems to set
*/
public void setSelectedItems(List<String> selectedItems) {
this.selectedItems = selectedItems;
}
/**
* @return the userselectedItems
*/
public List<Item> getUserselectedItems() {
this.userselectedItems.clear();
this.getSelectedItems();
// loop through the selectedItems array
for (String str : selectedItems) {
// each one item in the array, loop throug the list from
// getMenItem()
for (Item item : Items) {
// Match the ids' and store in a different list
if (str.matches(Integer.toString(item.getItemid()))) {
// add the items to the new list
this.userselectedItems.add(item);
}
}
// return the new list
}
return this.userselectedItems;
}
/**
* @param userselectedItems
* the userselectedItems to set
*/
public void setUserselectedItems(List<Item> userselectedItems) {
this.userselectedItems = userselectedItems;
}
/**
* @return the selectedMenItems
*/
/**
* @return the cartlist
*/
public List<Item> getCartlist() {
Cartlist.clear();
Cartlist.addAll(getUserselectedItems());
return Cartlist;
}
/**
* @param cartlist
* the cartlist to set
*/
public void setCartlist(List<Item> cartlist) {
Cartlist = cartlist;
}
/**
* @return the userselectedMenItems
*/
public int getTotal() {
int total = 0;
for (Item totalItemPrice : getCartlist()) {
total += totalItemPrice.getPrice();
}
return total;
}
/**
* @return the selectedDataItems
*/
// public List<Item> getSelectedDataItems() {
// return selectedDataItems;
// }
//
// /**
// * @param selectedDataItems the selectedDataItems to set
// */
// public void setSelectedDataItems(List<Item> selectedDataItems) {
// this.selectedDataItems = selectedDataItems;
// }
/**
* @return the selectedDataitem
*/
public Item getSelectedDataitem() {
return selectedDataitem;
}
/**
* @param selectedDataitem
* the selectedDataitem to set
*/
public void setSelectedDataitem(Item selectedDataitem) {
this.selectedDataitem = selectedDataitem;
}
public void saveOrder() {
Orders itemsOrdered = new Orders();
for (int i = 0; i < userselectedItems.size(); i++)
{
System.out.println(userselectedItems.get(i).getName());
itemsOrdered = new Orders((userselectedItems.get(i).getName()),
(userselectedItems.get(i).getPrice()));
System.out.println(itemsOrdered.getOrderName());
System.out.println(itemsOrdered.getTotalPrice());
itemsOrdered.setOrderDetails(Cartlist);
System.out.println(i);
System.out.println("Items ordered: " + itemsOrdered);
System.out.println("List item:" + Cartlist.get(0).getName());
ManageOrder dao = new ManageOrder();
for (int j = i; j < Cartlist.size(); j++) {
dao.addOrders(userselectedItems.get(j).getName(),
Cartlist.get(j).getPrice(), (ArrayList) Cartlist);
System.out.println("Name: "
+ userselectedItems.get(j).getName());
System.out.println("Price : " + Cartlist.get(j).getPrice());
}
}
}
中存储Point
个引用,而是存储Node
:这包括Object
,但也包括所有其他类,即其中的类这个方法没有定义。
因为无法静态地知道特定节点的数据是否为Point,所以编译器必须假设“最小公分母”,即Point
,因此只允许您调用在Object上定义的方法。
您需要专门化列表来保存Object
引用,或者使其成为通用的,以便它可以保存任何但是以类型安全的方式,即您(或者更确切地说) ,编译器)可以知道实例实际上是Points。
Point