03-方法ppt动手动脑问题及课后实验性问题总结
一.如何不使用static来进行调用函数?
1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了。如果想用又不加可以吧自己写的方法写在一个类中调用就行。主函数一般也只是调用不做数据处理。
2.static方法是在编译的时候确定的,在类装入内存的时候也同时装入内存了。而非static方法是在类的实例化的时候装入内存的,其必须依赖于类的实例。
实例在装入堆栈的时候是会附加上指向method area的指针,所以可以在非静态方法中调用static方法。
3.static方法中可以通过创建(new)该类的引用或者在调用static方法的时候传递一个对象的引用过去,这种方法来调用非static方法。
典型的例子就是static void main()方法,在这个static方法中可以看到,会创建任意的实例,然后通过这些实例来调用所属类的非静态方法。
特别注意的是:由JVM的执行机制决定了在static方法中是不能直接调用该类的其它非static方法的。
因为类方法(static方法)执行的时候,其所在的堆栈中是没有指向对象的引用的任何信息的,而非static方法在调用的时候又必须要知道调用该方法的对象的引用。所以从这里可以看出,static方法中是没有办法直接调用非static方法的。
从另外一方面来讲,static方法中是不存在this的,而this是一个很重要的指向对象的引用的关键字(每个非static方法中都应该存在的,并且指向了调用该方法的对象的引用;非static方法调用改类其他方法的时候实际上是用到了this.[Method])。所以没有this的static方法是不可能直接调用该类中的非static方法的。
二.动手动脑:编写一个方法,使用 x[n+1]=(a*x[n]+c) mod m生成指定数目(比如1000个)的随机整数
在java中,我们可以通过两种方式来获取随机数(generating a random number)一种是大家熟悉的java.lang.Math.Random()静态方法,另一种是创建java.util.Random对象。下面是两种方法的使用过程:
1)java.lang.Math.random()
在使用这一静态方法的时候,我们不需要import任何包,因为java.lang.*包是默认载入的,下面举例说面使用方法:
public class RandomTest{
public static void main(String[] args){
int i=Math.random();//random()会自动产生一个0.0-1.0的双精度随机数
System.out.println(i);//输出
i=Math.random()*1000;//产生0-1000的双精度随机数
System.out.println(i);
int b=(int)(Math.random()*1000);//产生0-1000的整数随机数
System.out.println(b);
}
}
2)创建java.util.Random对象
import java.util.random
public class RandomTest{
public static void main(String[] args){
Random random=new Random();//创建random对象
int intNumber=random.nextInt();//获取一个整型数
float floatNumber=random.nextFloat();//获取一个浮点数(0-1)
double doubleNumber=random.nextDouble();//获取双精度数(0-1)
boolean booleanNumber=random.nextBoolean();//获取boolean数
System.out.println("intNumber:"+intNumber);
System.out.println("floatNumber:"+floatNumber);
System.out.println("doubleNumber:"+doubleNumber);
System.out.println("booleanNumber:"+booleanNumber);
}
}
random在产生随机数的时候使用当前的时间作为基数,我们可以通过System.currentTimeMillis()来获取这个基数。当然我们也可以指定基数:
Random random=new Random(100),不过,同一基数所产生的随机数序列是一样的。
实现1000个随机数字的方法:
public class RandomTest{
public static void main(String[] args){
int z;
for(int n=0;n<1000;n++)
{
int x0=(int)(Math.random()*1000);
int a=(int)(Math.random()*1000);
int c=(int)(Math.random()*1000);
int m=(int)(Math.random()*1000);//产生0-1000的整数随机数
int y=n+1;
z=(a*x0+c)%m;
System.out.println(y+":"+z);
}
}
}
三.查看一下JDK中System.out.println()方法,你发现了什么?
System是jdk自带的一个类,他有很多的方法,这些方法都是静态的,也就是static的。System.out.print()就相当于一个函数,它之所以可以不断的重复使用,是因为它可以有不同类型的参数,不同个数的参数,参数的顺序也可以不同。
四.利用计算机计算组合数:
(1)使用组合数公式利用n!来计算
import java.math.BigInteger;
import java.util.Scanner; public class YangHui { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("求组合数C(n,k):(n为下标)");
//用户输入
System.out.print("请输入n,k:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int k = scan.nextInt();
if(n<k)
System.out.println("ERROR!");
else if(n==0&&k==0)
System.out.println("1");
else
System.out.print("C("+n+","+k+")="+Calculate(n)/Calculate(k)/Calculate(n-k));
}
public static long Calculate(int n) {
if(n==1)
{
return 1;
} return n*Calculate(n-1);
}
}
(2)使用递推的方法用杨辉三角形计算
import java.util.Scanner; public class YangHui1 { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("求组合数C(n,k):(n为下标)请输入n,k:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int k = scan.nextInt();
System.out.print("计算结果为:"+Calculate(n,k));
}
public static long factorial(int a)
{
if(a==0||a==1) return 1;
return a*factorial(a-1);
}
public static long Calculate(int n,int k)
{
return factorial(n)/(factorial(k)*factorial(n-k));
}
}
(3)使用递归的方法用组合数递推公式计算
import java.util.Scanner;
public class YangHui2 { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("求组合数C(n,k):(n为下标)");
//用户输入
System.out.print("请输入n,k:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int k = scan.nextInt();
System.out.print("计算结果为:"+Cal(n,k));
}
public static long Cal(int N , int k)
{
if(0 == k || 0 == N)
{
return 1;
} if(N < k)
{
return 0;
} if(N == k)
{
return 1;
} return Cal(N-1,k) + Cal(N-1,k-1);
}
}
四.使用递归方式判断字符串是否是回文数
import java.util.Scanner; public class HuiWen {
public static void main(String[] args) {
String S=" ";
System.out.println("请输入字符串S:");
Scanner sc= new Scanner(System.in);
S=sc.next();
Judge(S);
}
public static void Judge(String S)
{
int a= S.length();//字符串的长度
int b=0;
if(a==1)
{
System.out.println("单个字符是回文字符串!");
}
else if(S.charAt(0)!=S.charAt(a-1))//判断确定位置的字符是否一样
{
System.out.println("此字符串不是回文的!");
b=1;
}
else
{
System.out.println("此字符串是回文的!");
b=1;
}
if(a-2>0&&(b!=1))
Judge(S.substring(1,a-1));//截取从1到a-1的字符串重新存入字符串S的存储内存
}
}
03-方法ppt动手动脑问题及课后实验性问题总结的更多相关文章
- 05-String动手动脑问题及课后实验性问题总结
一.请运行以下实例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? (1)在Java中,内容相同的字符常量("Hello")只保存一 ...
- 02_java语法基础_课程动手动脑问题以及课后实验性问题及解答集锦
Answer: 动手动脑: 1:1.1--仔细阅读实例:EnumTest.java,运行它,分析运行结果? 1.2--你能得到什么结论?你掌握了枚举变量的基本用法了吗? answer:枚举类型是引用类 ...
- java语法基础--动手动脑问题及课后实验问题
---恢复内容开始--- 动手动脑: 1:仔细阅读示例:EnumTest.java,运行它,分析运行结果 结果 :枚举类型是引用类型!枚举类型不属于原始数据类型,它的每个具体指都引用一个特定的对象.相 ...
- java异常处理动手动脑问题解决和课后总结
动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...
- JAVA方法03之动手动脑问题解决
动手动脑1.当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉) public class SquareIntTest { public stat ...
- java动手动脑和课后实验型问题String类型
1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...
- JAVA 数组作业——动手动脑以及课后实验性问题
JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...
- java第二次课件课后动手动脑习题整理总结(2019年9月23号)
一.动手动脑 1 1.题目 2.程序源代码 package yang8; import java.util.Scanner; import java.util.Random; public class ...
- java课java方法动手动脑
动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) { ...
随机推荐
- GirdView 追忆学生时代的百思不得解
临近年关,越多越多的园友开始了对工作.生活的总结,以及对来年目标的确立.这很励志,人是一根能思想的苇草,想来想去,我实在没什么惊天地.泣鬼神的英勇事迹,16年毕业季,按部就班的在时间的马车上颠簸,阅读 ...
- css3样式控制(鼠标滑过 显示标注信息)
<div class="item"> <h1>A</h1> <div class="tooltip"> < ...
- HTML5的Video标签的属性,方法和事件汇总
<video>标签的属性 src :视频的属性 poster:视频封面,没有播放时显示的图片 preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览 ...
- 基于webrtc的资源释放问题(二)
基于webrtc的资源释放问题(二) ——建立连接的过程中意外中断 应用背景: 我们在打电话的时候会不会遇到这种情况?打电话的时候未接通之前挂掉了电话,或者在接通之后建立的连接的过程中挂掉电话? 特别 ...
- linux文件基本属性
在Linux中第一个字符代表这个文件是目录.文件或链接文件等等. 当为[ d ]则是目录 当为[ - ]则是文件: 若是[ l ]则表示为链接文档(link file): 若是[ b ]则表示为装置文 ...
- 浅析call和apply的不同
call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就 ...
- 《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(三)
http://www.cnblogs.com/batteryhp/p/5046433.html 5.示例:usda食品数据库 下面是一个具体的例子,书中最重要的就是例子. #-*- encoding: ...
- 立即执行函数: (function(){...})() 与 (function(){...}()) 有什么区别?
没有区别. function foo() {...} // 这是定义,Declaration:定义只是让解释器知道其存在,但是不会运行. foo(); // 这是语句,Statement:解释器遇到语 ...
- Java课程设计——扫雷(winmine)
因为是我的课程设计,要是有冲突就不好了,转载注明出处!!! 程序很简单,毕竟我是搞acm的,我就只介绍一下闪光点. 中心空白搜索的时候,我用的DFS: 有一点是要注意的,就是JFrame不支持重画,还 ...
- maven创建子项目(适用于多模块管理项目)
在eclipse或者myeclipse下构建maven项目,该项目由多个子模块组成. 1.创建一个父项目 NEW -->project-->maven-->maven Project ...