1. 用HashMap模拟一个网上购物车。要求:从键盘输入5本书的名称、单价、购买数量,将这些信息存入一个HashMap,然后将该HashMap作为参数调用方法getSum(HashMap books),该方法用于计算书的总价并返回。【说明:键盘输入可以使用Scanner类】
Book.java
1 package com.ly.cart; 2 3 public class Book { 4 private String name; 5 private double price; 6 private int count; 7 8 Book(String name,double price,int count){ 9 this.name = name; 10 this.price = price; 11 this.count = count; 12 } 13 14 public String toString(){ 15 return this.name + "\t\t" + this.price + "\t\t" + this.count + "\n"; 16 } 17 }
Cart.java
1 package com.ly.cart; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.Map; 6 import java.util.Scanner; 7 8 public class Cart { 9 public static double getSum(HashMap<String,String> book){ 10 double sum = 0.0; 11 Iterator mapsite = book.entrySet().iterator(); 12 while(mapsite.hasNext()){ 13 Map.Entry entry = (Map.Entry)mapsite.next(); 14 Object value = entry.getValue(); 15 double priceSum = Double.parseDouble(value.toString().trim().split("\t\t")[1]); 16 int countSum = Integer.parseInt(value.toString().trim().split("\t\t")[2]); 17 sum += priceSum*countSum; 18 } 19 return sum; 20 } 21 22 public static void main(String[] args) { 23 HashMap<String,String> map = new HashMap<String,String>(); 24 Scanner in = new Scanner(System.in); 25 String name; 26 double price; 27 int count; 28 29 for(int i=0;i<5;i++){ 30 System.out.println("请输入第"+ (i+1) +"本书的信息:"); 31 name = in.nextLine(); 32 price = Double.parseDouble(in.nextLine()); 33 count = Integer.parseInt(in.nextLine()); 34 Book book = new Book(name,price,count); 35 map.put("BOOK:" + (i+1), book.toString()); 36 } 37 38 Iterator mapsite = map.entrySet().iterator(); 39 System.out.println("\n" + "书目" + "\t\t" + "书名" + "\t\t" + "单价" + "\t\t" + "数量" +"\n"); 40 while(mapsite.hasNext()){ 41 Map.Entry entry = (Map.Entry)mapsite.next(); 42 Object key = entry.getKey(); 43 Object value = entry.getValue(); 44 System.out.println(key + "\t" + value); 45 } 46 System.out.println("书的总价为:" + getSum(map)); 47 } 48 }
2. 使用两个Stack类(JDK容器类库中的Stack类)实现一个队列类MyQueue,提供队列的入队列和出队列操作:enQueue和deQueue。
MyQueue.java
1 package com.ly.queue; 2 3 import java.util.Stack; 4 5 public class MyQueue { 6 private Stack stack1; 7 private Stack stack2; 8 private int len; 9 10 MyQueue(){ 11 stack1 = new Stack(); 12 stack2 = new Stack(); 13 len = 0; 14 } 15 16 public void enQueue(Object o){ 17 stack1.push(o); 18 len++; 19 } 20 21 public Object deQueue(){ 22 Object o = null; 23 if(stack1.isEmpty()){ 24 return null; 25 } 26 while(!stack1.isEmpty()){ 27 Object e = stack1.pop(); 28 stack2.push(e); 29 } 30 o = stack2.pop(); 31 while(!stack2.isEmpty()){ 32 Object e = stack2.pop(); 33 stack1.push(e); 34 } 35 return o; 36 } 37 }
Main.java
1 package com.ly.queue; 2 3 public class Main { 4 public static void main(String[] args) { 5 MyQueue queue = new MyQueue(); 6 int a = 1; 7 double b = 2.0; 8 queue.enQueue(a); 9 queue.enQueue(b); 10 queue.enQueue("string"); 11 12 System.out.println(queue.deQueue()); 13 System.out.println(queue.deQueue()); 14 System.out.println(queue.deQueue()); 15 System.out.println(queue.deQueue()); 16 } 17 }
3. 写一个彩票程序:30选7。随机(1~30之间)生成7个随机数,注意不能重复。然后从键盘输入7个数,对比7个数是否与随机数有相同的。最后显示“中了几个号”。同时,如果中了7个号,显示一等奖;如果中了6个号,显示二等奖;如果中了5个号,显示三等奖。要求:首先写出程序的实现思想,特别是程序所使用的数据结构,然后写出Java实现代码。【说明:键盘输入可以使用Scanner类】
Lottery.java
1 package com.ly.lottery; 2 3 import java.util.HashSet; 4 import java.util.Scanner; 5 import java.util.Set; 6 7 public class Lottery { 8 public static void main(String[] args) { 9 Set<Object> s = new HashSet<Object>(); 10 Scanner in = new Scanner(System.in); 11 int[] array = new int[7]; 12 int n =0; 13 14 //产生7个不相同的随机数 15 while(s.size()<7){ 16 s.add((int)(Math.random()*30+0.5)); 17 } 18 19 //输入7个数字 20 System.out.print("请输入7个数字:"); 21 for(int i=0;i<7;i++){ 22 array[i] = in.nextInt(); 23 } 24 25 //判断每个所输入的数字是否在HashSet里面 26 for(int i=0;i<7;i++){ 27 if(s.contains(array[i])){ 28 n++; 29 } 30 } 31 32 //显示结果 33 System.out.println("中了" + n +"个号"); 34 if(n==7){ 35 System.out.println("一等奖"); 36 } 37 if(n==6){ 38 System.out.println("二等奖"); 39 } 40 if(n==5){ 41 System.out.println("三等奖"); 42 } 43 44 } 45 }