Java课堂练习3

动手动脑1:

Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复。

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

/**
* 随机数发生器
*/
public class suiji
{
private static final int N = 200;
private static final int LEFT = 40;
private static final int RIGHT = 10000;
private static long x0 = 1L;
private long a = 1103515245L;
private long c = 12345L;
private long m = 2147483648L;

// 产生随机数
private long rand ( long r )
{
// a,c,m为常数
r = ( r * a + c ) % m;//Xn+1=(aXn + c)mod m
return r;
}

/**
* 表示a~b之间的一个随机数

* @param a
* @param b
* @param rand
* @return
*/
private long little ( int a, int b, long rand )
{
return a + rand % ( b - a + 1 );
}

private void recursion ( int count, long rand )
{
if (count >= N)
{
return;
}
rand = rand (rand);
long r = little (LEFT, RIGHT, rand);
System.out.print (r + " ");
recursion (++count, rand);
}

public static void main ( String[] args )
{
suiji recur = new suiji ();
recur.recursion (0, x0);
}
}

动手动脑2:

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

上述示例代码展示了Java的“方法重载(overload)”特性。满足以下条件的两个或多个方法构成“重载”关系:1.方法名相同(square)2.参数类型不同(int,double),参数个数不同或参数类型的顺序不同。

课后作业1:

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

package text;
import java.util.*;
public class jiecheng {

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);

}
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)使用递推的方法用杨辉三角形计算

package text;
import java.util.Scanner;
public class yhsj {

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 f = CombinationNumber(n,k);
System.out.println(" 公式计算结果为: "+f);
}
public static int CombinationNumber(int n,int k)
{
int f = 0;
if(n == 1||k == 0||n == k)
f = 1;
else
f = CombinationNumber(n - 1,k - 1) + CombinationNumber(n - 1,k);
return f;

}

}

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

package text;
import java.util.Scanner;
public class ditui {

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();
System.out.println("组合数结果为:"+jieguo(n,k));
in.close();

}
public static int jieguo(int m,int n)
{
if(m<0||n<0||m<n)
return 0;
if(m==n)
return 1;
if(n==1)
return m;
return jieguo(m-1,n)+jieguo(m-1,n-1);
}

}

课后作业2:

递归编程解决汉诺塔问题

package text;
import java.util.*;
public class hannuota {

// recursively move disks between towers
public static void solveTowers( int disks, int sourcePeg,
int destinationPeg, int tempPeg )
{
// base case -- only one disk to move
if ( disks == 1 )
{
System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );
return;
} // end if

// recursion step -- move (disk - 1) disks from sourcePeg
// to tempPeg using destinationPeg
solveTowers( disks - 1, sourcePeg, tempPeg, destinationPeg );

// move last disk from sourcePeg to destinationPeg
System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );

// move ( disks - 1 ) disks from tempPeg to destinationPeg
solveTowers( disks - 1, tempPeg, destinationPeg, sourcePeg );
} // end method solveTowers

public static void main( String[] args )
{
int startPeg = 1; // value 1 used to indicate startPeg in output
int endPeg = 3; // value 3 used to indicate endPeg in output
int tempPeg = 2; // value 2 used to indicate tempPeg in output
int totalDisks = 3; // number of disks

// initial nonrecursive call: move all disks.
solveTowers( totalDisks, startPeg, endPeg, tempPeg );
}

}

课后作业3:

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

package text;
import java.util.*;
public class huiwen {

public static void main(String[] args) {
// TODO Auto-generated method stub
String str="";
System.out.println("请输入一个字符串:");
Scanner in=new Scanner(System.in);
str=in.nextLine();

StringBuffer sb=new StringBuffer(str);
sb.reverse();

int n=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==sb.charAt(i))
n++;
}

if(n==str.length())
System.out.println(str+"是回文!");
else
System.out.println(str+"不是回文!");
}

}

时间: 2024-11-08 21:42:20

Java课堂练习3的相关文章

线程(java课堂笔记)

1.两种方式的差异 2.线程的生命周期 3.线程控制(线程的方法) 4.线程同步 5.线程同步锁 一. 两种方式的差异 A extends Thread :简单 不能再继承其他类了(Java单继承)同份资源不共享 B implements Runnable:( 推荐) )多个线程共享一个目标资源,适合多线程处理同一份资源. 该类还可以继承其他类,也可以实现其他接口. 二. 线程的生命周期 新建:当程序使用new创建一个线程后,该线程处于新建状态,此时他和其他java对象一样,仅仅由Java虚拟机

Java课堂测试——课程管理

本周的Java课,王老师让学长们就上周的课堂测试内容进行了讲解.本次讲解加强了我对JavaWeb的项目的认识.虽然JSP文件和Servlet文件里面涉及到的各个方法我不能很好的理解,可是关于表单提交,和数据库的信息处理等代码,我勉强可以理解它们的作用,并可以根据自己的需要对现有的代码进行修改,实现自己需要的功能.就本周的测试而言,我可以实现大部分要求的功能,但是有很多不足之处,比如界面不美观,无法实现模糊查找等.我将对本次的实验做出如下总结. 首先创建一个类,在类里面实现数据库的连接,如下所示.

Java课堂测试——输出单个文件中的前N个最常出现的英语单词

课堂测试一:输出某个英文文本文件中26字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位. HarryFre.java 1 package demo05; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.text.DecimalFormat; 7 import java.util.Array

java课堂练习——异常

1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 代码执行时不发生异常. jvm在处理浮点数时,生成的是ddiv字节码指令,i/0,0转化为浮点数0.0,而0.0是double类型的,并不精确,所以不会抛出异常. jvm在处理整数时,生成的是idiv字节码指令,整数除0就是除0,会抛出异常. 第一个程序没有执行finally? finally 必须与 try 或 try/catch 配合使用.因为并没有执行try,所以不会

java课堂动手动脑

实验任务一:阅读并运行示例PassArray.java. 1)源代码: package demo; //PassArray.java //Passing arrays and individual array elements to methods public class PassArray { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5 }; String output = "The values of

java课堂 动手动脑3

(1) 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { public static void main(String[] args) { // TODO Auto-generated method stub InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new Initializ

java课堂笔记------日期API

* 默认创建出来的Date实例表示当前系统时间 Date date = new Date(); * 获取Date内部维护的long值 long l = date.getTime(); * 支持传入long值的构造方法 * 创建的Date就表示该long值所表示的时间 Date now = new Date(1000*60*60*24); * 也可以在现有的Date对象上调用setTime方法 * 将long值传入,使其表示这个时间 date.setTime(1000*60*60*24); * j

java课堂笔记------集合api

Collection c = new ArrayList(); * boolean add(E e) * 将当前集合中添加给定的元素 * 若成功添加则返回true c.add("one"); c.add("two"); * int size() * 获取当前集合中的元素个数 c.size(); * boolean isEmpty() * 判断当前集合是否不包含任何元素 * 当集合中没有元素时返回true boolean isEmpty = c.isEmpty();

JAVA课堂作业(七)

一.动手动脑 1)源代码 public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue(

java课堂练习7

动手实验1: 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! 1)输出结果: 2)结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句. 动手实验2: 参看ExplorationJDKSource.java示例 此示例中定义了一个类A,它没有任何成员: class A { } 示例直接输出这个类所创建的对