《JAVA 语言程序设计基础篇》chapter 5 方法

依然是先回顾一下上一章的内容

主要是关于循环语句

这里做一个有关于蒙特卡罗模拟有关的练习

先是一段背景介绍

蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,

即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,

通过模拟实验的结果,作为问题的近似解。可以把蒙特卡罗解题归结为三个主要步骤:

构造或描述概率过程;实现从已知概率分布抽样;建立各种估计量。

简单讲就是使用随机数和概率来解决问题,

先使用蒙特卡罗方法来估算π ,画出一个圆的外接正方形

假设圆的半径是1,那么圆的面积就是π,而外接正方形的面积是4,

随便产生一个点落在这个圆内的概率是 圆面积/正方形面积=π/4

编写程序,在正方形内随机产生1000000个点,用numberOfHits表示落在圆内的点

因此,numberOfHits大约是1000000*(π/4),可以近似估算π为4*numberOu

fHits/1000000

程序代码如下:

MonteCarloSimulation

 1 //使用蒙特卡洛方法模拟PI值 2 public class MonteCarloSimulation { 3     public static void main(String[] args) { 4         // TODO Auto-generated method stub 5         final int NUMBER_OF_TRIVALS=10000000; 6         int numberOfHits=0; 7          8         for(int i=0;i<NUMBER_OF_TRIVALS;i++){ 9             double x=Math.random()*2.0-1;10             double y=Math.random()*2.0-1;11             if(x*x+y*y<=1)12                 numberOfHits++;13         }14         double pi=4.0*numberOfHits/NUMBER_OF_TRIVALS;15         System.out.println("PI is"+pi);16     }17 }

GUI(使用确认对话框来实现一个标志值控制的循环)

DataSum

 1 import javax.swing.JOptionPane; 2 public class DataSum { 3  4     public static void main(String[] args) { 5         // TODO Auto-generated method stub 6         int sum=0; 7          8         int option=JOptionPane.YES_OPTION; 9         10         while(option==JOptionPane.YES_OPTION){11             String dataString =JOptionPane.showInputDialog("请输入一个整数:\n");12             int data=Integer.parseInt(dataString);13             14             sum+=data;15             16             option=JOptionPane.showConfirmDialog(null, "是否继续加入整数 ?");17         }18         19         JOptionPane.showMessageDialog(null, "总和为:"+sum);20     }21 22 }

接下来进入第五章的内容

之前有用实现过打印素数,这里使用方法来实现

PrimeNumberMethod

 1 public class PrimeNumberMethod { 2  3     public static void main(String[] args) { 4         // TODO Auto-generated method stub 5         System.out.println("The first 50 prime numbers are:"); 6         printPrimeNumbers(50); 7     } 8     public static void printPrimeNumbers(int numberOfPrimes){ 9         final int NUMBER_OF_PRIMES_PER_LINE=10;10         int count=0;11         int number=2;12         while(count<numberOfPrimes){13             if(isPrime(number)){14                 count++;15                 if(count%NUMBER_OF_PRIMES_PER_LINE==0){16                     System.out.printf("%-5s\n", number);17                 }18                 else 19                     System.out.printf("%-5s", number);20             }21             number++;22         }23     }24     public static boolean isPrime(int number){25         for(int divisor=2;divisor<=number/2;divisor++){26             if(number%divisor==0){27                 return false;28             }29         }30         return true;31     }32 }

使用方法可以减少冗余,提高代码的复用性,比如之前求公约数的那个程序,换成用方法实现

GreatestCommonDivisorMethod

 1 import java.util.Scanner; 2 public class GreatestCommonDivisorMethod { 3  4     public static void main(String[] args) { 5         // TODO Auto-generated method stub 6         Scanner input=new Scanner(System.in); 7          8         System.out.print("请输入第一个整数:"); 9         int n1=input.nextInt();10         11         System.out.print("请输入第二个整数: ");12         int n2=input.nextInt();13         14         System.out.println(n1 +" 和 "+n2 +"的最大公约数为: "+gcd(n1,n2));15     }16     17     public static int gcd(int n1,int n2){18         int gcd=1;19         int k=2;20         while(k<=n1&&k<=n2){21             if(n1%k==0&&n2%k==0){22                 gcd=k;23             }24             k++;25         }26         return gcd;27     }28 }

之后再做一个将十进制数转换为十六进制数的

Decimal2Hex

 1 import java.util.*; 2 public class Decimal2Hex { 3  4     public static void main(String[] args) { 5         // TODO Auto-generated method stub 6         Scanner input=new Scanner(System.in); 7  8         System.out.print("请输入一个十进制整数:  "); 9         int decimal=input.nextInt();10         System.out.print("转换为16进制数之后为: "+decimalToHex(decimal));11         12     }13     public static String decimalToHex(int decimal){14         String hex="";15         while(decimal!=0){16             int hexValue=decimal%16;17             hex=toHexChar(hexValue)+hex;18             decimal=decimal/16;19         }20         return hex;21     }22     public static char toHexChar(int hexValue){23         if(hexValue<=9&&hexValue>=0){24             return (char)(hexValue+'0');25         }26         else 27             return (char)(hexValue-10+'A');28     }29 }

方法抽象是通过将方法的使用和它的实现分离来实现的。

方法体可以看做是一个包括该方法实现细节的黑匣子

当实现一个大型程序时常用的思想是自顶向下设计和自底向上的实现

不要一次性编写完整个程序

posted on 2012-02-08 16:52 菜牙先生 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lengmo/archive/2012/02/08/2337246.html

《JAVA 语言程序设计基础篇》chapter 5 方法相关推荐

  1. java语言读后感_《Java语言程序设计基础篇》读后感锦集

    <Java语言程序设计基础篇>是一本由梁著作,机械工业出版社出版的平装图书,本书定价:58.00元,页数:500,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助. <Jav ...

  2. Java语言程序设计基础篇-第10版-第一部分-程序设计基础)

    Java程序语言设计(基础篇)-第10版 第一部分 程序设计基础 第1章 计算机.程序和Java概述 1.1 引言 程序设计就是创建(或者开发)软件,软件也称为程序. 简言之,软件包含了指令,告诉计算 ...

  3. Java语言程序设计基础篇原书第十版第二章编程练习题答案

    程序如有问题,及时联系博主哦~博主会贴出所有带有星号的题目,以及一些典型的例子,希望能够帮助到同学们,也希望同学们都学好java语言. 2.1将摄氏温度转换为华氏温度 package nameyu;i ...

  4. Java语言程序设计基础篇(第十版)课后习题答案 - 第一章

    第一章:计算机.程序和Java概述 复习题 1.1 什么是硬件和软件? 答:硬件指计算机中可见的物理部分:软件是计算机中看不见的指令,这些指令控制硬件并使硬件完成特定的任务. 1.2 列举计算机的5个 ...

  5. java语言程序设计基础篇课后答案_《Java语言程序设计:基础篇》课后复习题答案-第十五章.pdf...

    <Java语言程序设计:基础篇>课后复习题答案-第十五章 Chapter15Graphics 1. Theycoordinateshouldincreaseandthexcoordinat ...

  6. java语言程序设计基础篇14.6答案_《Java语言程序设计-基础篇》答案-第15章

    第15章 异常和断言 复习题 15.1 答:略 15.2 答:声明异常是为了在方法中产生异常时,以便通知方法的调用者. 在方法声明的头部使用关键字throws 声明,一个方法可以声明多个异常.如: p ...

  7. Java语言程序设计基础篇(第十版 梁勇著)课后习题答案 - 第二章

    第二章:基本程序设计 复习题 2.1 指出并修改以下代码中的错误: public class Test {public void main(String[] args) {double i = 50. ...

  8. Java语言程序设计基础篇 循环(四)练习

    *4.21(计算不同利率下的贷款)编写程序,让用户输入贷款总额及以年为单位的贷款期限,以1/8为递增量,显示从5%到8%的利率下每月支付额和总偿还额.假设输入贷款总量为10 000,还贷期限为5年,所 ...

  9. java 坦克大战画坦克_【JAVA语言程序设计基础篇】--JAVA实现坦克大战游戏--画出坦克(二)...

    坦克类: //坦克父类 可以设置坦克出现位置(x,y) class Tank { int x = 0; int y = 0; public Tank (int x,int y){ this.x = x ...

最新文章

  1. 视频分享网站首页:最新视频特效
  2. 众说纷纭office2010系列
  3. 谈服务发现的背景、架构以及落地方案
  4. python自动抓取指定信息_使用python自动转发抓取的网页信息
  5. boost::msm::mpl_graph::incidence_list_graph相关的测试程序
  6. BFS迷宫问题模型(具体模拟过程见《啊哈算法》)
  7. 基于图的图像分割(Graph-Based Image Segmentation)
  8. 滴水穿石--mysql添加授权用户命令
  9. Android系统(23)---Android 应用分屏
  10. hibernate(五)之继承关系
  11. Java虚拟机 --- 内存区域
  12. 计算机图形学学习记录(一) —— DDA画线算法
  13. iOS蓝牙4.0(BLE)-LightBlue与cc2540开发板通信
  14. linux cuda 编程指南,CUDA编程指南阅读笔记
  15. 如何把手机证件照压缩到15KB?手机压缩图片方法
  16. 华为光纤猫HG8240破解,开启路由功能表
  17. 音视频之模拟今日头条列表视频
  18. Verilog学习笔记(06)
  19. iOS10新特性及开发者要注意什么
  20. JS 删除对象(Object)中的键值对

热门文章

  1. js实现IE、谷歌浏览器打印网页内容
  2. Flutter 页面滚动吸顶详解(NestedScrollView)
  3. 【Vue】—插槽的基本语法
  4. authorization 传 就跨域_headers中添加允许token,客户端跨域请求问题
  5. 酒的基金降幅较大,这是为什么?
  6. 这个世界有一种无形的力量~梦想
  7. 为什‮多很了学么‬营销‮识知‬依然赚不到钱?
  8. 为什么好多人都要给Typec叫华为充电线?
  9. 为什么现在电脑基本没有病毒了?
  10. 家里的宽带是300兆,路由器也是换的千兆的,为何网络还是不好?