02-实验性问题总结归纳
02-方法
动手动脑问题和课后实验性问题总结
一、编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。
//生成指定数目的随机数
package suijishu;
import java.util.*;
public class Suijishu
{
public static void main(String[] args)
{
Random rand=new Random();
Scanner input=new Scanner(System.in);
int n;
System.out.print("输入产生随机数的个数:");
n=input.nextInt();
for(int i=0;i<n;i++)//通过循环实现输出若干个随机整数
{
int x=rand.nextInt(100);//随机产生一个种子
int seed=(7^5*x+0)%(2147483647-1);
System.out.print(seed+" ");//生成随机整数
}
}
}
二、请看以下代码,你发现了有什么特殊之处吗?
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;
}
}
此段代码用到了重载的方法,形参分别为int x和double y。其中,两个方法名必须相同,因为此段代码中的参数类型不同,所以能够形成重载的关系。
三、查看一下JDK中System.out.println()方法,你发现了什么?
System.out.println()是System提供的标准输出流。
System.out.println(“12345”);//直接输出12345
System.out.println(“i=”+i);//+用于拼接
System.out.println(i);//直接输出变量
System.out是一个PrintStream实例的引用;System.out::println 是对一个实例方法的引用。该引用同时指定了对实例(System.out)的引用以及对方法(PrintStream::println)的引用。System.out::println 不是 System.out.println 的等价物;前者是一个方法引用表达式,而后者不能单独作为一个表达式,而必须在后面跟上由圆括号包围的参数列表来构成方法调用表达式。System.out::println 可以看作 lambda表达式 e -> System.out.println(e) 的缩写形式。
四、CalculateN示例程序中的BUG,阶乘数为什么会出现负数?
import java.math.BigInteger;
import java.util.Scanner;
public class CalculateN {
public static void main(String[] args) {
System.out.print("请输入N:");
Scanner scanner=new Scanner(System.in);
int number=scanner.nextInt();
System.out.println(number+"!="+calculateN2(number));
}
public static long calculateN(int n) {
if(n==1 || n==0){
return 1;
}
return n*calculateN(n-1);
}
public static BigInteger calculateN2(int n) {
if(n==1 || n==0){
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(n).multiply(calculateN2((n-1)));
}
}
由于计算机使用固定的位数来保存数值,因此,能处理的数值大小是有限的,当要处理的数值超过了这一范围时,计算机将会自动截断数值的二进制表示为它所能处理的最多位数,这将导致错误的处理结果。