博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
03 方法
阅读量:5062 次
发布时间:2019-06-12

本文共 4196 字,大约阅读时间需要 13 分钟。

【动手动脑】

 

当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉)

 

public class SquareIntTest {    public static void main(String[] args) {        int result;        for (int x = 1; x <= 10; x++) {            result = square(x);            // Math库中也提供了求平方数的方法             //result=(int)Math.pow(x,2);            System.out.println("The square of " + x + " is " + result + "\n");        }    }    // 自定义求平方数的静态方法    //问:如果不加static,怎么办?    public static int square(int y) {        return y * y;    }}

 

因为static 是静态的意思,main是静态的,想加载的时候就加载了,可将函数写在一个新的类中即可,如下所示:

 

public class SquareIntTest {    public static void main(String[] args) {        int result;        for (int x = 1; x <= 10; x++) {            result = new Test().square1(x);//非静态            System.out.println("The square of " + x + " is " + result + "\n");        }    }}class Test{    public int square1(int y) {        return y*y;         }}

 

【动手动脑】

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

import java.util.Scanner;

public class Random {

public static void main(String[] args) {

// TODO Auto-generated method stub
System.out.println("请输入希望产生的随机数的个数:");
Scanner input=new Scanner(System.in);
int N=input.nextInt();
int result;
for(int i=0;i<N;i++)
{
result=(int)(Math.random()*10000);
System.out.println(result);
}
}
}

【动手动脑】

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

// 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;
}
}

答:此代码中采用static调用自定义方法,如果不加static可以使用类名.成员名或者对象名.成员名调用。

三、递归

1、编个程序求n!

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

四、处理大数字和浮点数

2、看上面程序中出现的错误,阶乘数怎么可能出现复数?

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

五、课后作业

背景:杨辉三角形与组合数公式

利用杨辉三角形原理来计算 组合数

使用计算机计算组合数:

(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.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);
}
}

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

 

 课后作业2 

递归编程解决汉诺塔问题。用Java实现

课后作业3

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

public class Huiwen {

    public static boolean isHuiwen(String s,int i,int j)  

   {   if(i>j)    throw new IllegalArgumentException();   

       if(i == j)    return true;   

       else{    return (s.charAt(i)==s.charAt(j))&& isHuiwen(s,i+1,j-1);   }

}  

    public static void main(String[] args) {

      String test = "ABCBA";

     int i=0;   int j=test.length()-1;

     System.out.println(test + " is Palindrome?" + Huiwen.isHuiwen(test, i, j));

 }  

}

 

转载于:https://www.cnblogs.com/610553824lyx/p/5966205.html

你可能感兴趣的文章
JAVA面试常见问题之Redis篇
查看>>
Problem - 1118B - Codeforces(Tanya and Candies)
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
平面最接近点对
查看>>
HTML列表,表格与媒体元素
查看>>
PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
java对象的深浅克隆
查看>>
Hadoop流程---从tpch到hive
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
设计器 和后台代码的转换 快捷键
查看>>
在线视频播放软件
查看>>
用代码生成器生成的DAL数据访问操作类 基本满足需求了
查看>>
28初识线程
查看>>
Monkey测试结果分析
查看>>
Sublime Text 3 设置
查看>>