长数组计算java

时间:2018-03-04 01:51:32

标签: java arrays

我是一名新手程序员并且在理解数组时遇到了问题。我有两个String数组:

String[] itemList = {"item1", "item2", "item3",....."item10"}

String[] country = {"US", "UK", "France",....."Germany"}

正如您可能理解的那样,我的想法是,我应该能够从itemList中选择一个项目,选择一个country,该程序应该会显示该国家/地区的特定项目费用。 现在,我可以使用if statement并说些什么:

ìf(itemList[i] == "item1" && country[i] == "US"){ //check the price for item1 in the US...}

如果我们的项目数量较少,这项工作正常,但如果项目数组太大,如数十万呢?如果我为每个项目选择if statement,代码将会非常庞大​​。你们能提出更好的解决方案吗? 先感谢您!

4 个答案:

答案 0 :(得分:2)

制作一个Item对象(在单独的班级中...... Item.class

import java.util.Map;
import java.util.HashMap;

public class Item {
    private final String name;
    // <CountryName, Price>
    private Map<String, Double> countryPrices;

    public Item(String name) {
        this.name = name;
        this.countryPrices = new HashMap<>();
    }

    public String getName() {
        return this.name;
    }
    public void setPrice(String countryName, double price) {
        this.countryPrices.put(countryName, price);
    }
    public double getPrice(String countryName) {
        return this.countryPrices.get(countryName);
    }
}

如果这是一个严肃的应用程序,请使用BigDecimal以获得更准确的价格。

此外,您可能需要创建一个Country enum,这样您就不必总是确保拼写正确并使用正确的大写/小写字母。< / p>

要使用此功能,请创建项目列表:

List<Item> items = new ArrayList<>();

然后添加新项目:

Item someItem = new Item();
someItem.setPrice("USA", 2.99);

然后,根据给定的国家/地区名称获取商品的价格:

// get from user input
String countryName =...
String itemName =...

// loop  through the items list we created
for (Item item : items) {
    if (item.getName().equalsIgnoreCase(itemName)) {
        // we found the item we are looking for! get the price
        double price = item.getPrice(countryName);
        // do what you want with this...
        System.out.println(itemName + "'s price in " + countryName + " is " + price + ".");
        // We are done looking - we found the item and got it's price. End the loop
        break;
    }
}

旁注:作为@JacobG。说,don't compare strings with ==

答案 1 :(得分:0)

您可以(并且应该)使用循环迭代两个数组/数据集并自动计算价格。

例如:

for (int i = 0; i < itemList.length; i++){
    String currentItem = itemList[i]; //Takes one item at a time

    for (int j = 0; j < country.length; j++){
        String currentCountry = country[j];

        //Calculate price for both with example function
        double price = calculatePrice(currentItem, currentCountry);

    }

}

答案 2 :(得分:0)

我在这里遇到了你的问题。

我想提到的一些事情是

  1. 字符串比较不适用于==,请仔细检查方法和原因。
  2. 此外,您需要处理您的逻辑,如果组合超出您可以处理的范围,如果其他将无济于事。因此,我假设您需要根据国家和货币显示特定商品的价格。我将强调一些你可以思考的观点:国家是有限的,而物品的数量可以改变。此外,您还需要维护从基础货币到国家货币的价格转换。按照这些思路思考,你会没事的。
    1. 由于你是编程的新手,我建议不要担心长度。对于大多数情况下,阵列很好,对于大型列表的复杂目的,我们使用各种方法来处理这个问题,分页是最常见的。
  3. 快乐的编码!

答案 3 :(得分:0)

假设问题得到了恰当的说明:

  

正如你可能理解的那样,我的想法是,我应该能够选择一个   itemList中的项目,选择一个国家,程序应该告诉我如何   很多特定项目在该国家的成本。现在,我可以使用if   声明并说些什么:

如果您从项目列表中选择一个项目,那么您应该已经在该列表中拥有它的索引(让我们称之为 item )。

同样适用于国家/地区(但请拨打索引国家/地区)。

现在你可能有一个稀疏的2-dim价格数组(称为价格),然后你可以说:

/* datatype of price is left out as a different discussion, might be long
 for penny or cent or float for learning purpose or BigDecimal for bigger prieces. 
*/
price = prices[country][item];

如果价格存储在地图中,也许您可​​以通过国家名称,项目名称以相同的方式查询。只要我们不知道,我们只能猜测。

price= prices.get ("US" + ":" + "Java-Compiler"); 

也许价格在数据库中,因此您需要查询。