1>类的对象实例化

由于main为静态类型,所以在调用函数时也必须调用静态方法,如上代码中的求平方数的静态方法,如何在静态main中调用非静态类的方法呢?

静态方法只能直接访问静态成员,无法访问非静态成员,如果想要访问费静态方法,则实例化该类对象,使用对象名.非静态方法()的方式来访问。

第一:创建类的对象

类名   对象名=new  类名( );

第二:调用方法或变量

对象名.成员方法名();

数据类型   变量名= 对象名.成员变量名;

2>编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。

方法:通过置X(n + 1) ≡(a*X(n) + c )mod  m ,求得随机数序列< Xn > , 这个序列称作线性同余序列。m、a 、c 和 X0 分别称做模数、乘数、增量和初始值。

模m, m > 0
系数a, 0 < a < m
增量c, 0 <= c < m
原始值(种子) 0 <= X(0) < m

import java.util.*;
public class TextRandom { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in); int a = (int)Math.pow(7,5);
int m = (int)Math.pow(2, 31) - 1;
int c = 0; System.out.print("请输入要产生随机数的个数:");
int n = in.nextInt();
for(int i = 0;i<n;i++)
{
Random x1 = new Random();
int x3 = x1.nextInt(10);
int x2 = (a* x3+c)%m;
System.out.println(x2);
}
} }

方法重载:

3>请看以下代码,你发现了有什么特殊之处吗?

 // MethodOverload.java
// Using overloaded methods public class MethodOverLoad { public static void main(String[] args) {
System.out.println("The square of integer 7 is " + square(7));
System.out.println("\nThe square of double 7.5 is " + square(7.5));
} public static int square(int x) {
return x * x;
} public static double square(double y) {
return y * y;
}
}

上诉代码显示了 Java 的“方法重载”特性,上诉代码由于方法的参数类型不同(一个为 int,一个为 double ),使同名的函数被调用时有所区分;满足以下条件的两个或多个方法构成“重载”关系: 方法名相同, 参数类型不同,参数个数不同,或参数类型的顺序不同;但方法的返回值不作为方法重载的判断条件。例如在JDK中调用 System.out.println() 函数时会显示许多重载函数。

4>使用计算机计算组合数:

(1)使用组合数公式利用n!来计算

 //利用阶乘公式计算组合数
import java.util.*;
public class CombinationNumber { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.print("请输入组合数下标n:");
int n = in.nextInt();
System.out.print("请输入组合数上标k:");
int k = in.nextInt(); int C = Jiecheng(n)/(Jiecheng(k)*Jiecheng(n - k));
System.out.println("C(n,k) = "+C); }
public static int Jiecheng(int n)//递归法计算阶乘
{
int s = 0;
if(n < 0)
System.out.println("Error!");
else if(n == 1||n == 0)
s = 1;
else
s = n * Jiecheng(n -1);
return s;
}
}

实验总结:利用递归法求阶乘,利用公式即可求得组合数的计算结果。

(2)使用递推的方法用杨辉三角形计算

 //使用递推的方法用杨辉三角形计算组合数
import java.util.Scanner; public class CombinationNumber2 { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.print("请输入组合数下标n:");
int n = in.nextInt();
System.out.print("请输入组合数上标k:");
int k = in.nextInt(); int C = CombinationNumber(n,k);
System.out.println("C(n,k) = "+C);
}
public static int CombinationNumber(int n,int k)
{
if(k == 0||n == k) return 1;
int s=Math.min(k,n-k);
int p = 1,q = 0; for(int i = 1; i <= s; i++)//递推计算
{
q = p * (n-i+1)/(i);
p = q;
} return q;
}
}

实验总结:利用for循环逐步求得组合数结果。

(3)使用递归的方法用组合数递推公式计算

//使用递归的方法用组合数递推公式计算
import java.util.Scanner; public class CombinationNumber3 { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.print("请输入组合数下标n:");
int n = in.nextInt();
System.out.print("请输入组合数上标k:");
int k = in.nextInt(); int C = CombinationNumber(n,k);
System.out.println("C(n,k) = "+C);
}
public static int CombinationNumber(int n,int k)//递归法计算组合数
{
int c = 0;
if(n == 1||k == 0||n == k)
c = 1;
else
c = CombinationNumber(n - 1,k - 1) + CombinationNumber(n - 1,k);
return c;
}
}

实验总结:利用递推公式,递归方式求得;注意结束条件。

5>递归编程解决汉诺塔问题。

//递归编程解决汉诺塔问题。
import java.util.*;
public class TowersOfHanoi2 { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.print("请输入盘子个数:");//盘子从上至下编号从1到n
int p = in.nextInt();
char ch1 = 'A';
char ch2 = 'B';
char ch3 = 'C';
Hanoi(p,ch1,ch2,ch3);//最终实现1到n个盘子从A柱移到C柱
}
public static void move(int n,char from,char to)
{
System.out.printf( "将%d号盘子%c --> %c\n",n,from,to);
}
public static void Hanoi(int n,char from,char mid,char to)
{
if(n == 1)
move(1,from,to);//结束条件,当n = 1时移动一次即可
else
{Hanoi(n-1,from,to,mid);//将n-1个盘子从A移到B
move(n,from,to);//将n个盘子移到C
Hanoi(n-1,mid,from,to);//将n-1个盘子从B移到C
}
}
}

实验总结: 当A塔上有n个盘子时,先将A塔上编号 1 至 n-1 的盘子移动到B塔上(借助C塔),然后将A塔上n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。即用递归实现,结束条件是 n=1 时只需直接移动;遇到的问题:如何递归实现。

6>使用递归方式判断某个字串是否是回文。

//判断输入的字符串是否是回文数
import java.util.*;
public class Huiwen { public static void main(String[] args) {
// TODO Auto-generated method stub
String temp = "";
char[] a;
Scanner in = new Scanner(System.in);
System.out.print("请输入要判断的字符串:");
String str = in.next();
a = str.toCharArray();//将字符串对象中的字符转换为一个字符数组
for(int i = a.length - 1;i >= 0;i--)//将字符串逆置
{
temp += a[i];
}
if(str.equals(temp))
System.out.println(str+"是回文数!");
else
System.out.println(str+"不是回文数!");
}
}

实验总结:将输入的字符串转化为数组形式储存才能方便比较(利用 toCharArray() 函数)。

Java动手动脑(二)的更多相关文章

  1. Java动手动脑——多态和继承

    Java动手动脑——继承和多态 实验一 预估输出答案:100  200  201  202 输出结果:100  200  201  202 输出答案分析:100 创建parent类的对象,调用对象的方 ...

  2. JAVA动手动脑多态

    动手实验一:下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 先进行自我判断,得出结论后,运行TestCas ...

  3. java 动手动脑7

    ---恢复内容开始--- 一.动手动脑:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-c ...

  4. java动手动脑和动手实验

    动手动脑一: EnumTest.java: 程序代码: public class EnumTest { public static void main(String[] args) { Size s= ...

  5. java动手动脑和课后实验型问题String类型

    1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...

  6. java动手动脑和课后实验型问题第四讲

    1.完全"手写代码实现"随机数生成 动手动脑: 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. Modulus=231-1=int.MaxValue Mult ...

  7. Java动手动脑第四讲课堂作业

    动手动脑1 完全“手写代码实现”随机数生成 纯随机数发生器

  8. java动手动脑和课后实验型问题

    1.以下代码的输出结果是什么?为什么会有这个结果? int[] a = { 5, 7, 20 }; System.out.println("a数组中的元素:"); // 循环输出a ...

  9. java动手动脑1

    一.以下代码的输出结果是什么? int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X ...

随机推荐

  1. GMM的EM算法实现

    转自:http://blog.csdn.net/abcjennifer/article/details/8198352 在聚类算法K-Means, K-Medoids, GMM, Spectral c ...

  2. 1、win32创建窗口函数(windows程序内部运行机制)

    利用win32创建窗口函数,主要操作步骤为: 1.设计一个窗口类 2.注册窗口类 3.创建窗口 4.显示及窗口更新 5.消息循环 6.窗口过程函数   (1)设计一个窗口类 设计窗口类,这样的类型已经 ...

  3. nodejs在同一台服务器上部署并同时运行两个或以上服务端时,一个服务用户登录后会挤掉另一个用户的问题

    问题描述:一台服务器,部署了两个或以上不同的Web服务,服务A的用户在登陆后,服务B的用户也登陆,此时服务A的用户在点击页面时,会返回登陆页面. 问题根源:浏览器保存的session相同,即cooki ...

  4. JS中Array详细用法

    1.数组的创建 var name= new Array(); //创建一个数组 name[0]="zhangsan";   //给数组赋值 name[1]="lisi&q ...

  5. CSS 单行溢出文本显示省略号...的方法(兼容IE FF)(转)

    http://www.52css.com/article.asp?id=602 ===================================================     html ...

  6. Ninject之旅之四:Ninject模块

    摘要 随着应用程序的增长,注册的服务列表跟着变长,管理这个列表将变得困难.Ninject模块是一个好的将我们的类型绑定分离到不同的绑定组的方式,它很容易地将分组组织到不同的文件中.将一个类变成一个Ni ...

  7. 《Benign and maligenant breast tumors classification based on region growing and CNN segmentation》翻译阅读与理解

    注明:本人英语水平有限,翻译不当之处,请以英文原版为准,不喜勿喷,另,本文翻译只限于学术交流,不涉及任何版权问题,若有不当侵权或其他任何除学术交流之外的问题,请留言本人,本人立刻删除,谢谢!! 另:欢 ...

  8. centos环境自动化批量安装软件脚本

    自动化安装jdk软件部署脚本 准备工作: 1.在执行脚本的服务器上生成免密码公钥: 安装expect命令 yum install -y expect ssh-keygen 三次回车 2.将jdk-7u ...

  9. HDOJ(1115)多边形重心

    Lifting the Stone http://acm.hdu.edu.cn/showproblem.php?pid=1115 题目描述:输入n个顶点(整数),求它们围成的多边形的重心. 算法:以一 ...

  10. 一种table超出高度自动出滚动条的解决方案

    在日常的开发过程中,我们可能会遇到这样一种需求,在指定高度内显示table,超过高度时表格出滚动条. 让我们带着这个问题,一起来探讨吧! <!DOCTYPE html> <html ...