黑马程序员技术交流社区

标题: 求助大神,好人一生平安 [打印本页]

作者: 张弗睿    时间: 2016-11-4 23:23
标题: 求助大神,好人一生平安
  map中有如下数据:{茄子 = 2.0, 黄瓜 = 2.5 ,西红柿 = 5.0, 土豆 = 3.0 , 豆角 = 3.5}(12分)
                a. 实现一个询问价格的方法(获取用户在控制台上输入的蔬菜名称,然后在该map集合中查询对应的价格)有,则输出相对应的价格,如果
                没有则提示用户“已经卖完”(4分)
                b. 将黄瓜的价格上调 1 元,(不能直接赋值3.5)(3分)
                c. 将所有蔬菜的价格大于3的蔬菜名称打印到控制台(5分)
作者: 张弗睿    时间: 2016-11-4 23:26
本帖最后由 张弗睿 于 2016-11-4 23:29 编辑

Scanner sc = new Scanner(System.in);
                Double d = sc.nextDouble();

                String key = askPrice(d);
                System.out.println(key);
        }

        private static String askPrice(Double d) {
                HashMap<String,Double> hm = new HashMap<>();
                hm.put("茄子", 2.0);
                hm.put("黄瓜", 2.5);
                hm.put("西红柿", 5.0);
                hm.put("土豆", 3.0);
                hm.put("豆角", 3.5);
                for (String key : hm.keySet()) {
                        if (d == hm.get(key)){        
                                return key;
                        }
                }
                return null;
        }

}
//询问价格这么做,键盘录入后 ,返回值是null,哪里出毛病了
作者: shyboy716    时间: 2016-11-5 20:12
你调错方法了  keySet的返回值 是Set集合类型 这个方法是主要是用于遍历Map集合时用的,要询问价格的话 通过查询Key的值来获得。
作者: shyboy716    时间: 2016-11-5 20:17

部分代码如下:

[Java] 纯文本查看 复制代码
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Test {
        public static void main(String[] args) {
                Map<String,Double>  map = new HashMap<String,Double>();
                map.put("茄子", 2.0);
                map.put("黄瓜", 2.5);
                map.put("西红柿", 5.0);
                map.put("土豆", 3.0);
                map.put("豆角", 3.5);
               
                Scanner sc = new Scanner(System.in);
                String input = sc.next();
                Double num = map.get(input);
                if(num == null){
                        System.out.println("已经卖完");
                }else{
                        System.out.println(num);
                }
               
        }
}

作者: 蔡永汪    时间: 2016-11-5 20:27
默默路过~~~。。。。寂寞的潜水
作者: 飞天神猫    时间: 2016-11-5 20:55

本帖最后由 张弗睿 于 2016-11-4 23:29 编辑


Scanner sc = new Scanner(System.in);
                Double d = sc.nextDouble();

                String key = askPrice(d);
                System.out.println(key);
        }

        private static String askPrice(Double d) {
                HashMap<String,Double> hm = new HashMap<>();
                hm.put("茄子", 2.0);
                hm.put("黄瓜", 2.5);
                hm.put("西红柿", 5.0);
                hm.put("土豆", 3.0);
                hm.put("豆角", 3.5);
                for (String key : hm.keySet()) {
                        if (d == hm.get(key)){        
                                return key;
                        }
                }
                return null;
        }

}
作者: 读书可以当饭吃    时间: 2016-11-5 22:18
这个有点难度
作者: 读书可以当饭吃    时间: 2016-11-5 22:26
不过代码也不多
作者: Tyoo    时间: 2016-11-5 22:44
控制台录入的应该是蔬菜名,就应该是String,要打印价格,askPrice方法返回的应该是价格double。这个程序你录入蔬菜名吗?不能存为Double类型的d,录入不会出错吗?其次,除了d==get(key),以外,所有其他的情况都会返回null,因为最后那个return在循环外
作者: Tyoo    时间: 2016-11-6 00:23
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
               
                Scanner sc = new Scanner(System.in);
                HashMap<String, Double> verg = new HashMap<>();
               
                verg.put("茄子", 2.0);
                verg.put("黄瓜", 2.5);
                verg.put("西红柿", 5.0);
                verg.put("土豆", 3.0);
                verg.put("豆角", 3.5);
               
                System.out.println("请输入蔬菜名称:");
                String line = sc.nextLine();
                //        查询蔬菜价格
                checkPrice(verg,line);
               
                String item = "黄瓜";
                verg.put(item, verg.get(item) + 1.0);
               
                System.out.println("--------------------------------------------");
               
                System.out.println("打印集合:");
                System.out.println(verg);
                System.out.println("--------------------------------------------");
               
                //        价格大于3的蔬菜打印出来
                System.out.println("价格大于3.0的蔬菜有:");
                Set<String> vergName = verg.keySet();
                for (String name : vergName) {
                        if(verg.get(name) > 3.0) {
                                System.out.println(name);
                        }
                }

        }

        private static void checkPrice(HashMap<String, Double> verg, String name) {
               
               
                Set<String> vergName = verg.keySet();
                if(vergName.contains(name)) {
                        System.out.println(name + ":" + verg.get(name));
                } else {
                        System.out.println(name + "已经卖完!");
                }
        }

作者: 张弗睿    时间: 2016-11-6 00:33
张弗睿 发表于 2016-11-4 23:26
Scanner sc = new Scanner(System.in);
                Double d = sc.nextDouble();

看错题了,应该输入的是蔬菜名,已经做出来了,感谢各位大神
作者: peng84    时间: 2016-11-6 00:43
大神好多啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2