【问题标题】:I want to create a HashMap out of two arrays that I have (Java)我想从我拥有的两个数组中创建一个 HashMap (Java)
【发布时间】:2015-10-19 19:00:29
【问题描述】:

现在我的程序正在输出我想要的数据(我用一些 system.out.println 语句检查了它)但我想将这两个数组转换为一个包含两者的哈希图。我不知道该怎么做。请帮忙!

这是我的代码:

import java.util.*;
import java.io.File;
import java.io.FileNotFoundException;

public class Vending2 
{
  public static void main(String[] args) throws FileNotFoundException
  {
      System.out.print("Enter your food selection file: ");      // User inputs file
      Scanner input = new Scanner(System.in);                       // Keyboard input from user
      String filename = input.nextLine();
      Scanner fs = new Scanner(new File(filename));         // Scans in the file that was inputed

        String line;
        double price;
        int num = 0;
        while(fs.hasNextLine()){
             line = fs.nextLine();
             price = Double.parseDouble(line.split(":")[0]);
             num++;
        }

        fs.close();
        fs = new Scanner(new File(filename));

        double[] value = new double[num];                        //Array for prices
        int i = 0;
        while(fs.hasNextLine()){
             line = fs.nextLine();
             price = Double.parseDouble(line.split(":")[0]);
             value[i] = price;
             i++;
        }
        System.out.println(Arrays.toString(value));

        fs.close();
        fs = new Scanner(new File(filename));

         ArrayList<String> foods = new ArrayList<String>();  
        while( fs.hasNext()){

            String str = fs.nextLine();
            String words[] = str.split(":");
            if (words.length > 0){

                for(int j=1; j < words.length; j++){
                    foods.add(words[j]);
                }
            }
        }
        System.out.println("foods="+foods);


    }
  }

这是它目前输出的内容(这是我想要放入哈希图中的内容):

1.0, 1.5, 1.5, 2.0, 1.0, 1.0, 1.25, 0.75, 1.0, 1.0, 1.0, 1.5, 1.25, 0.5, 0.5, 0.5, 3.5, 1.75, 0.25, 1.5]
foods=[Honey roasted peanuts, Cheetos, Bugles, Synder’s Pretzels, Snickers, Twix, M n Ms, Life savers, Twizzlers, Nutter Butters, Butter Fingers, King Size Kit Kats, Carrot sticks, Juicy Fruit, Spearmint Gum, Five gum, Pepperoni, Cheez-Its, Slim Jim, Lays Barbeque Chips]

【问题讨论】:

  • 那么您想将食物名称映射到相应的价格中吗?
  • 您当前的问题历史给人的印象是(strong)您将 stackoverflow 用作“家庭作业制作机”。但是,像这样的问题可能是合法的,如果您尝试以更适合 Q/A 网站的形式来表达它,那么它们可能会被更好地理解。这指的是措辞的细节(“我想”与“如何”),但也关注问题的核心:没有Scanners,没有文件,只是一个@ 987654325@ 具有两个硬编码数组的方法。此外,您应该精确了解哪个数组包含 keys 以及哪个数组包含 values
  • 最好直接从文件中映射出来。您可以将文件中的示例添加到您的问题中吗?
  • @RealSkeptic 见stackoverflow.com/questions/33219776/… ... ... ...
  • @Marco13 有趣。然后我想知道split(":") 将如何工作......我想你之前的评论是有道理的。

标签: java arrays hashmap


【解决方案1】:

假设foods 列表和value 数组的长度始终相同,因此您可以将它们一起循环。

Map<String, Double> map = new HashMap<String, Double>();

int i = 0;
while (i < foods.size() && i < value.length) { //for safety i will check on both sizes
    map.put(foods.get(i), value[i]);
    i++;
}

【讨论】:

  • 您能否为您的答案添加一些解释?仅代码答案在 SO 上不受欢迎。
【解决方案2】:

如果您的两个数组/列表长度相同,请执行以下操作:

Map<String, Double> map = new HashMap<>();
for (int i = 0; i < value.length; i++) {
    map.put(foods[i], value[i]);
    // or map.put(foods.get(i), value[i]) if foods is a List
}

假设一种食物只有一个价格。

【讨论】:

  • 如何在给定的代码中实现这一点?不用说“我”已经被定义了,我该把它放在哪里。 (对不起,我对 java 很陌生)
  • 只需将变量重命名为j。此外,如果您的价格不是整数,您可能需要一个 `Map
  • 好的,我这样做了,它说“需要数组”。
  • 你需要foods.get(j),因为它是一个列表,而不是一个数组。
  • 谢谢你,但是它说“找不到方法“foods(int)””
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
相关资源
最近更新 更多