java-7311练习(下)

java练习,仅供参考!

欢迎同学们交流讨论。

JDK 1.8 API帮助文档

JDK 1.6 API中文文档

第一次小组作业:模拟双色球彩票

游戏规则:

? 双色球为红球和蓝球

? 用户从1-33中自选6个数字(不能重复)代表红球;从1-16中自选1个数字代表蓝球;

? 上图为中奖规则,如一等奖为中6个红球及蓝球,二等奖为仅中6个红球……

? 请自拟六个奖项对应的奖品。

  1. package GroupFirst;



  2. import java.util.Scanner; 


  3. /** 

  4. * 第一次小组作业:模拟双色球彩票  

  5. * ?游戏规则 

  6. * ?双色球为红球和蓝球 

  7. * ?用户从1-33中自选6个数字(不重复)代表红球;从1-16中自选1个数字代表蓝球 

  8. * ?上图为中奖规则,如一等奖为中6个红球及蓝球,二等奖为仅中6个红球…… 

  9. * ?请自拟六个奖项对应的奖品 

  10. */ 

  11. public class Balllottery 



  12. private int[] betRedBall = new int[6]; //存放选择的6个红球 

  13. private int betBlueBall; //1个蓝球 

  14. Scanner scan = null; //扫描器对象 

  15. private int[] winningRedBall = {1,2,3,4,5,6}; //红球中奖号码 

  16. private int winningBlueBall = 7; //蓝球中奖号码 


  17. public static void main(String[] args) 



  18. Balllottery lottery = new Balllottery(); 

  19. //1 2 3 4 5 66 7 8 

  20. //从1-33中自选6个数字(不重复)代表红球 

  21. lottery.seletRedBall();//lottery.seletRedBall(); 

  22. System.out.println("--------红球选择完成-----------"); 


  23. //从1-16中自选1个数字代表蓝球 

  24. lottery.seletBlueBall(); 

  25. System.out.println("--------蓝球选择完成-----------"); 


  26. //投注并开奖; 

  27. int level = lottery.lotteryBetting(); 

  28. //显示奖品;  

  29. lottery.showResults(level); 





  30. public void showResults(int level) 



  31. System.out.println("---------------------------"); 

  32. System.out.print("您的投注为:"); 

  33. for (int i = 0; i < betRedBall.length; i++) 

  34. System.out.printf("%-3d",betRedBall[i]); 

  35. System.out.print(", " + betBlueBall + "\n"); 


  36. System.out.print("开奖号码为:"); 

  37. for (int i = 0; i < winningRedBall.length; i++) 

  38. System.out.printf("%-3d",winningRedBall[i]); 

  39. System.out.print(", " + winningBlueBall + "\n\n"); 


  40. //根据中奖等级分配奖品 

  41. switch (level) 



  42. case 0: System.out.println("抱歉,您没中奖!"); break; 

  43. case 1: System.out.println("一等奖,恭喜您获得自行车一辆!"); break; 

  44. case 2: System.out.println("二等奖,恭喜您获得保温杯一个!"); break; 

  45. case 3: System.out.println("三等奖,恭喜您获得新书包一个!"); break; 

  46. case 4: System.out.println("四等奖,恭喜您获得记事本一个!"); break; 

  47. case 5: System.out.println("五等奖,恭喜您获得签字笔一个!"); break; 

  48. case 6: System.out.println("六等奖,恭喜您获得黑铅笔一个!"); break; 



  49. System.out.println("\n---------------------------"); 




  50. // 从1-33中自选6个数字(不重复)代表红球 

  51. public void seletRedBall() 



  52. //用一个数组来存放33个红球并赋值1-33号 

  53. int[] redBall = new int[33];  

  54. for (int i = 0; i < redBall.length; i++) 

  55. redBall[i] = i + 1; // 1--33 


  56. // used表示已经出现过的红球 ; boolean数组默认初始为false 

  57. boolean[] used = new boolean[redBall.length]; 


  58. int count = 0; //统计下注红球个数 


  59. // 输入6个不重复的红球号码,并存放到bet数组 

  60. //Scanner scan = null; 

  61. scan = new Scanner(System.in); 

  62. System.out.println("请输入6个红球号码(1-33):"); 


  63. while (scan.hasNext()) 



  64. int num = scan.nextInt(); // 获得输入 


  65. // 如果这个号码是1-33号,那么就重新选择 

  66. if (num < 1 || num > 33) 



  67. System.out.println("没有" 

  68. + num + "号,请选1-33号。您还需要选择" 

  69. + (6-count) +"个红球!"); 

  70. continue; 



  71. // 如果这个号码没有被选过,那么就放到bet数组 

  72. if (!used[num]) 



  73. betRedBall[count++] = num; 

  74. used[num] = true; 

  75. System.out.println("已选" 

  76. + num + "号!您还需要选择" 

  77. + (6-count) +"个红球!"); 



  78. else  



  79. System.out.println(num + "号已选过,您还需要选择" 

  80. + (6-count) +"个红球!"); 



  81. // 选完6个红球则跳出循环 

  82. if (count==6) break; 






  83. // 从1-16中自选1个数字代表蓝球  

  84. public void seletBlueBall() 



  85. // 输入1个蓝球号码 

  86. //Scanner scan = null; 

  87. scan = new Scanner(System.in); 

  88. System.out.print("请输入1个蓝球号码(1-16):"); 

  89. int num ; 

  90. while (scan.hasNextLine()) 



  91. num = scan.nextInt(); // 获得输入 

  92. // 

  93. // 如果这个号码是1-16号,那么就重新选择 

  94. if (num < 1 || num > 16) 



  95. System.out.println("没有" 

  96. + num + "号,请选1-16号!"); 

  97. continue; 



  98. else 



  99. betBlueBall = num; 

  100. System.out.println("已选" 

  101. + num + "号!"); 

  102. break; 








  103. // 投注并开奖 

  104. public int lotteryBetting() 



  105. int correctRedCount = 0; // 猜中的红球个数 

  106. boolean correctBlueCount = false; // 是否猜中篮球 


  107. //遍历选择的红球;对比开奖结果 算出中奖的红球个数 

  108. for (int i = 0; i < betRedBall.length; i++) 



  109. for (int j = 0; j < winningRedBall.length; j++) 



  110. if (betRedBall[i] == winningRedBall[j]) 



  111. correctRedCount++; 

  112. continue; 








  113. // 判断是否猜中蓝球 

  114. if (betBlueBall == winningBlueBall) correctBlueCount = true;  


  115. /** 没中奖 返回 0 

  116. * 一等奖 中 6+1 

  117. * 二等奖 中 6+0 

  118. * 三等奖 中 5+1 

  119. * 四等奖 中 5+0 中 4+1 

  120. * 五等奖 中 4+0 中 3+1 

  121. * 六等奖 中 2+1 中 0+1 中 1+1 

  122. */ 

  123. System.out.println("Debug:" 

  124. + correctRedCount + "," + correctBlueCount); 

  125. if (correctRedCount == 6) 



  126. if (correctBlueCount) return 1; 

  127. else return 2; 



  128. if (correctRedCount == 5) 



  129. if (correctBlueCount) return 3; 

  130. else return 4; 



  131. if (correctRedCount == 4) 



  132. if (correctBlueCount) return 4; 

  133. else return 5; 



  134. if (correctBlueCount) 



  135. if (correctRedCount == 3) return 5; 

  136. //else if (correctRedCount == 2) return 6; 

  137. //else if (correctRedCount == 1) return 6; 

  138. else return 6; 




  139. return 0; 





运行结果:

week7 Cylinder(二)

2个文件 cylinder_1.dat, cylinder_0.dat都放在项目根目录的resource包下,内容如下:

7.1 Cylider.java

  1. package week7;



  2. import java.text.DecimalFormat; 


  3. /** 

  4. * 7.1 创建 Cylinder类,以存储标签、半度; 

  5. * 方法包括获得及设置这些成员变量,计算直径、周长面积及体积。  

  6. */ 

  7. public class Cylinder 



  8. private String lable; //存储标签 

  9. private double radius; //圆柱半径 

  10. private double height; //圆柱的高 

  11. Cylinder(String lable, double radius, double height) 



  12. this.lable = lable; 

  13. this.radius = radius; 

  14. this.height = height; 




  15. public String getLable() 



  16. return lable; 




  17. public boolean setLable(String lable) 



  18. boolean flag = true; 


  19. if (lable.isEmpty()) flag = false; 

  20. else this.lable = lable.trim(); 

  21. //String.trim()截去字符串开头和末尾的空白 

  22. return flag; 




  23. public double getRadius() 



  24. return radius; 




  25. public void setRadius(double radius) 



  26. this.radius = radius; 




  27. public double getHeight() 



  28. return height; 




  29. public void setHeight(double height) 



  30. this.height = height; 




  31. //返回圆柱底面直径 

  32. public double diameter() 



  33. return radius * 2; 




  34. //返回圆柱底面周长 

  35. public double circumference() 



  36. return diameter() * Math.PI; 




  37. //返回 表面积 = 圆柱底面积×2 + 底面周长×高 

  38. public double area() 



  39. return Math.PI * radius * radius * 2 

  40. + circumference() * height; 




  41. //返回 圆柱底体积 

  42. public double volumn() 



  43. return Math.PI * radius * radius * height; 




  44. @Override 

  45. public String toString() 



  46. String output = null; 

  47. DecimalFormat df = new DecimalFormat("#,##0.0##"); 

  48. output = lable 

  49. + " is a cylinder with radius = " + df.format(radius) 

  50. + " units and height = " + df.format(height) 

  51. + " units, " 

  52. + "\nwhich has diameter = " + df.format(diameter()) 

  53. + " units, circumference = " + df.format(circumference()) 

  54. + " units, " 

  55. + "\narea = " + df.format(area()) 

  56. + " square units, and volume = " + df.format(volumn()) 

  57. + " cubic units.\n"; 

  58. return output; 




  59. public static void main(String[] args) 



  60. Cylinder c1 = new Cylinder("Small Example", 4.0, 10.0); 

  61. Cylinder c2 = new Cylinder("Medium Example", 22.1, 30.6); 

  62. Cylinder c3 = new Cylinder("Large Example", 100.0, 200.0); 

  63. c1.setLable(""); 

  64. System.out.println(c1); 

  65. System.out.println(c2); 

  66. System.out.println(c3); 






7.2 CylinderList.java

  1. package week7;



  2. import java.text.DecimalFormat; 

  3. import java.util.ArrayList; 


  4. /** 

  5. * 7.2 CylinderList类  

  6. */ 

  7. public class CylinderList 



  8. private String listName; 

  9. private ArrayList<Cylinder> cList; 


  10. CylinderList(String listName, ArrayList<Cylinder> cList) 



  11. this.listName = listName; 

  12. this.cList = cList; 




  13. //返回一个代表几何名字的字符串 

  14. public String getName() 



  15. return listName; 




  16. //返回代表集合中Cylinder对象的个数 

  17. public int numberOfCylinders() 



  18. return cList.size(); 




  19. //返回 所有的Cylinder对象的 高 的和 

  20. public double totalHeight() 



  21. double totalHeight = 0; 

  22. for (Cylinder cylinder : cList) 



  23. totalHeight += cylinder.getHeight(); 



  24. return totalHeight; 




  25. //返回 所有的Cylinder对象的 圆柱底面直径 的和 

  26. public double totalDiameter() 



  27. double totalDiameter = 0; 

  28. for (Cylinder cylinder : cList) 



  29. totalDiameter += cylinder.diameter(); 



  30. return totalDiameter; 




  31. //返回 所有的Cylinder对象的 面积 之和 

  32. public double totalArea() 



  33. double totalArea = 0; 

  34. for (Cylinder cylinder : cList) 



  35. totalArea += cylinder.area(); 



  36. return totalArea; 




  37. //返回 所有的Cylinder对象的 体积 之和 

  38. public double totalVolume() 



  39. double totalVolume = 0; 

  40. for (Cylinder cylinder : cList) 



  41. totalVolume += cylinder.volumn(); 



  42. return totalVolume; 




  43. //返回 所有的Cylinder对象 面积 的 平均值 

  44. public double averageArea() 



  45. double averageArea = 0; 

  46. if (cList.size()>0) 



  47. averageArea = totalArea()/cList.size(); 



  48. return averageArea; 




  49. //返回 所有的Cylinder对象 体积 的 平均值 

  50. public double averageVolume() 



  51. double averageVolume = 0; 

  52. if (cList.size()>0) 



  53. averageVolume = totalVolume()/cList.size(); 



  54. return averageVolume; 




  55. //返回 集合的名字及集合中每一个对象的toString方法 

  56. public String toString() 



  57. String output = "\n" + listName + "\n\n"; 

  58. for (Cylinder cylinder : cList) 



  59. output += (cylinder.toString() + "\n");  



  60. return output; 




  61. //返回 集合的名字及Cylinder对象个数, 

  62. //总面积,总体积,平均面积及平均体积 

  63. public String summaryInfo() 



  64. String output = null; 

  65. DecimalFormat df = new DecimalFormat("#,##0.0##"); 

  66. output = "-----" + listName + " Summary-----" 

  67. + "\nNimber of Cylinders: " + numberOfCylinders() 

  68. + "\nTotal Area: " + df.format(totalArea()) 

  69. + "\nTotal Volume: " + df.format(totalVolume()) 

  70. + "\nTotal Height: " + df.format(totalHeight()) 

  71. + "\nTotal Diameter: " + df.format(totalDiameter()) 

  72. + "\nAverage Area: " + df.format(averageArea()) 

  73. + "\nAverage Volume: " + df.format(averageVolume()); 

  74. return output; 





7.3 CylinderListApp 测试类

  1. package week7;



  2. import java.io.File; 

  3. import java.io.FileNotFoundException; 

  4. import java.util.ArrayList; 

  5. import java.util.Scanner; 


  6. /** 

  7. * 7.3 CylinderListApp 测试类 

  8. * (a) 打开用户输入的文件并读取第一行作为集合的名字;之后读取其他行, 

  9. * 依次生成Cylinder对象,最后生成CylinderList对象。 

  10. * (b) 输出CylinderList对象(调用toString方法),之后空一行, 

  11. * (c) 输出CylinderList对象的汇总信息(调用summaryInfo方法) 

  12. * 注意: 

  13. * 1)如果输入文件名后出现错误称找不到文件,此时可输出绝对路径 

  14. * 2)读取文件第一行作为集合名称后,使用以scanFile.hasNext() 

  15. * 为条件的while循环反复读入三行,然后创建Cylinder对象 

  16. * 3)输出结果必须与下面测试输出的结果完全一致 

  17. */ 

  18. public class CyliderListApp 



  19. public static void main(String[] args) throws FileNotFoundException 



  20. String lable; 

  21. double radius; 

  22. double height; 

  23. Scanner scan0 = new Scanner(System.in); 

  24. Scanner scan1 = null; 

  25. Scanner inputStream = null; 


  26. ArrayList<Cylinder> cList = new ArrayList<>(10); 

  27. CylinderList cylinderList = null;//new CylinderList(listName, cList) 


  28. System.out.print("Enter file name: "); 

  29. String fileName = scan0.nextLine(); // cylinder_0.dat 

  30. scan0.close(); 


  31. File file = new File(fileName); 

  32. if(file.exists()) 



  33. inputStream = new Scanner(file); 


  34. String listName = inputStream.nextLine(); 

  35. while (inputStream.hasNextLine()) 



  36. String line = inputStream.nextLine(); 

  37. //使用逗号分隔line,例:Small Example, 4.0, 10.0 

  38. scan1 = new Scanner(line); 

  39. scan1.useDelimiter(","); 

  40. if (scan1.hasNext()) 



  41. lable = scan1.next(); 

  42. radius = Double.parseDouble(scan1.next()); 

  43. height = Double.parseDouble(scan1.next()); 

  44. //创建Cylinder对象并加入ArrayList<Cylinder>中 

  45. cList.add(new Cylinder(lable, radius, height)); 



  46. scan1.close(); //就近原则,以免出现空指针 



  47. inputStream.close(); 

  48. //初始化CylinderList对象 

  49. cylinderList = new CylinderList(listName, cList); 

  50. System.out.print(cylinderList.toString()); 

  51. System.out.println(cylinderList.summaryInfo()); 



  52. else 



  53. System.out.println(file.getAbsolutePath()); 








运行结果:

8 Cylinder(三)

-------------------------2016-11-**更新

//wiating for update...
//
//run
//

9 Cylinder(四)

-------------------------2016-11-**更新

//wiating for update...
//
//run
//
时间: 2024-11-05 12:22:05

java-7311练习(下)的相关文章

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

【java】Windows7 下设置环境变量

Windows 7下配置JDK环境变量參数设置: 1.    安装JDK,安装过程中能够自己定义安装文件夹等信息,比如我们选择安装文件夹为:D:\Program Files (x86)\Java\jdk1.6.0_25 2.    安装完毕后,右击"我的电脑",点击"属性",单击"高级系统设置",点击"环境变量",如图: 4.    在"系统变量"中,设置3项属性,JAVA_HOME,PATH,CLASSP

Java和C#下的参数验证

参数的输入和验证问题是开发时经常遇到的,一般的验证方法如下: public bool Register(string name, int age) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException("name should not be empty", "name"); } if (age < 10 || age > 70) { throw new ArgumentExcept

java多环境下的配置

在项目开发过程中经常会有开发环境.测试环境.生产环境等,这些环境下的配置文件又各不相同.如何在不同环境下使用不同的配置是一个有意思的问题 常用的做法有 1.使用jndi通过tomcat不同的配置,这个需要在每一个tomcat下都进行配置,最恶心的是在eclipse下tomcat插件无法读取到jndi的信息. 2.还是通过配置tomcat的参数,读取不同环境下的配置,这种情况也有问题,eclipse下的tomcat插件也无法读取到,因为开发环境才会用到tomcat插件,所以读取不到可以默认为开发环

java从基础知识(十)java多线程(下)

首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 每个线程都有自己的工作内存,存有主内存中共享变量的副本,当工作内存中的共享变量改变,会主动刷新到主内存中,其它工作内存要使用共享变量时先从主内存中刷新共享变量到工作内存,这样就保证了共享变量的可见性. 可

【Java】Linux下安装配置Oracle JDK 1.7版本

1 环境 Vmware虚拟机中的Ubuntu 12.04 32位系统 2具体安装步骤 ①下载最新的jdk包 注意jdk区分32位版本和64位版本,要与Ubuntu兼容才行 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html ②创建一个目录,解压压缩包 mkdir usr/lib/jvm 移动到该目录,并解压 [email protected]:/usr/lib$ sudo

spring java 获取webapp下文件路径

spring java 获取webapp下文件路径 @RequestMapping("/act/worldcup_schedule_time/imgdownload") @ResponseBody public String scheduleDownload(HttpServletRequest request, HttpServletResponse response, HttpSession session) { response.setCharacterEncoding(&quo

解决:java 读取 resources 下面的 json 文件

前言:java 读取 工程下的配置文件,文件类型为 json(*.json),记录一下始终读取不到 json 文件的坑.maven项目 直接上工具类代码 package com.yule.component.dbcomponent.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ResourceUtils; import java.io.*; /** *

JVM(四):深入分析Java字节码-下

JVM(四):深入分析Java字节码-下 在上文中,我们讲解了 Class 文件中的文件标识,常量池等内容.在本文中,我们就详细说一下剩下的指令集内容,阐述其分别代表了什么含义,以及 JVM 团队这样设计的意义. 简介 JVM 指令设计为仅有一个字节长度,由操作码和紧随其后的零至多个操作数来构成. 这里说到 JVM 的指令仅有一个字节,这意味着 JVM 在操作超过一个字节长度的数据时,需要在运行时重建出多字节数据类型的具体数据结构,例如 Long 等.这会导致这个操作不是原子操作,在高并发的情况

Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍

Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: ? 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本文中,凯哥就用AQS来代替这个类).我们先来了解这个类.对这个类了解之后,学习后面的会更容易了. 本篇是<凯哥(凯哥Java:kagejava)并发编程学习>系列之<Lock系列>教程的第一篇:<Java并发包下锁学习第二篇:队列同步器>. 本文主要内容:同步器介绍:同步器