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

       }

}

由于计算机使用固定的位数来保存数值,因此,能处理的数值大小是有限的,当要处理的数值超过了这一范围时,计算机将会自动截断数值的二进制表示为它所能处理的最多位数,这将导致错误的处理结果。

posted @ 2017-10-12 21:28  博呀客  阅读(202)  评论(0编辑  收藏  举报