我有以下代码,我从文本文件中读取。文本文件i如下:
111 Laptop 500 10
222 Mobile 120 8
333 Notebook 4 100
444 Chocolates 3 50
555 Guitar 199 5
666 LenovoLaptop 470 10
777 HPLaptop 450 10
888 SonyVAIO 525 5
如果用户输入ID
为111
,则输出结果如下:
111 Laptop 500 10
666 LenovoLaptop 470 10
777 HPLaptop 450 10
888 SonyVAIO 525 5
我将文本文件的内容存储在HashMap中。这是代码:
public void comparableItems(String ID)
{
File f = new File("C://Class/items.txt");
HashMap<String, Item> map = new HashMap<String, Item>();
try
{
Scanner scan = new Scanner(f);
while(scan.hasNext())
{
String line = scan.nextLine();
String temp[] = line.split(" ");
Item it = new Item(temp[0], temp[1], Double.parseDouble(temp[2]), Integer.parseInt(temp[3]));
map.put(it.itemID, it);
}
if(map.containsKey(ID))
{
Item item = map.get(ID);
if(item.price>=item.price+100 && item.price<=item.price-100)
{
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
这是Item类:
public class Item
{
String itemID;
String itemName;
double price;
int quantity;
public Item(String itemID, String itemName, double price, int quantity)
{
this.itemID = itemID;
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
public void printItemDetails()
{
System.out.println("ID\tItemName\tUnitPrice\tQuantity");
System.out.println("===================================================");
System.out.println(this.itemID+ "\t" +this.itemName+ "\t" +this.price+ "\t"+this.quantity);
}
}
如何获得所需的输出?我正处于Java Collections的学习阶段。所以请耐心等待。
有人可以帮助我吗?
谢谢!
答案 0 :(得分:2)
你的Map
并不能帮到你。由于您在解析文件之前就知道要查找的参考项目ID,因此您可以在解析期间(以及如果)看到该项目时捕获该项目。您确实需要某种集合来保存所有其他项目,但List
对于此特定任务来说是更好的选择。
在任何情况下,您的问题的主旨似乎是检查您从文件中解析的所有其他项目。为此,您希望迭代Map
的{{1}}视图(并使您的比较正确):
values()
如果您收集了for (Item otherItem : map.values()) {
if((otherItem.price <= item.price + 100)
&& (otherItem.price >= item.price - 100)) {
otherItem.printItemDetails();
}
}
而不是List
中的项目,那么您只需Map
(或者您使用的任何名称)替换上面的map.values()
list
)。
答案 1 :(得分:0)
对于您想要的内容(价格接近所需商品的商品),HashMap不是一个高效的数据存储区。
然而,由于这听起来像是你的作业,一旦你使用map.get(&#34; 111&#34;)来获得你的笔记本电脑,得到价格P,然后迭代哈希图得到任何项目其价格在您想要的P的增量范围内。集合教程告诉您如何迭代集合。