Java03动手动脑

Posted -相勖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java03动手动脑相关的知识,希望对你有一定的参考价值。

1.当JAVA里定义的函数中去掉static后,怎么办?

static代表静态,由于main函数是静态的,如果自己定义的函数方法加了static则在类加载时就一起加载了、但如果不写static,就必须通过初始化一个对象(即new)后,通过对象来调用,否则报错,如

代码:

class A{
    public static void main(String[]args){
        A a = new A();
        a.printHello();
    }
 
    void printHello(){
        System.out.println("Hello");
    }
}

 

2.纯随机数发生法:

编写方法声称指定数目的随机数并且当显示(2的31次方-1)之后才允许重复

代码:

package randomfs;
import java.util.Scanner;
import java.util.Random;
public class Randomfs {
 //wow原来包和类名可以不一样哟
 public static void main(String[] args){
 System.out.println("输入产生随机数个数:");
  Scanner sc=new Scanner(System.in);
  int a=sc.nextInt();int o=0;
  for(int i=0;i<a;i++)
  {
   System.out.println(bcfRan(i)+" ");
   o++;
  }
  System.out.println("得到的个数为"+o);
 }
 //认为这里的数据类型转换不当
 public static int bcfRan(int a){
  double c=Math.pow(2,31)-1;
  double  x=(16870*a)%c;
  int y = (int)x;
  return y;
 }
}

 

运行结果:

2.1    2.2

3.动手动脑观察下列的特殊之处:

代码:

package Try;
public class Try
{
    public static void main(String[] args)
 {
     System.out.println(" The square of 7 is"+square(7));
     System.out.println(" The square of 7.5 is"+square(7.5));
 }
    
    public static int square(int x){
     return x*x;
    }
    
    public static double  square(double x){
     return x*x;
    }
}

不同之处:

  相同的方法名但是参数类型不一样。

运行结果:

练习:查看一下JDK中System.out.println()方法,你发现了什么?
System.out.println()由于参数不同所以可不断使用。
查阅资料:
System是java.lang里面的一个类。而out就是System里面的一个数据成员(也称为字段),但这个成员不是基本类,而是java.io.PrintStream类的对象被关键字static修饰的数据成员或方法可以直接通过“类名.数据成员”或“类名.方法”来引用,而无须先建立对象。所以System.out是应用了out这个静态数据成员。而out又是一个java.io.PrintStream类的对象,所以out必然可以调用。println()就是java.io.PrintStream类里的一个方法,它的作用就是用来想控制台输出信息。
课后:
使用组合数公式利用n!来计算

代码:
package n;//包用小写,类用大写
import java.util.*;//不知道这俩个有啥区别
import java.util.Scanner;
import  java.math.BigInteger;
public class N {
    public static void main(String[] args){

    System.out.println("输入组合数n,m以便求其阶乘n!/((n-m)!*m!):");
    Scanner sc1=new Scanner(System.in);
    int a=sc1.nextInt();
    Scanner sc2=new Scanner(System.in);
    int b=sc2.nextInt();
    if(a<b)
    {int c=a;a=b;b=c;}
    System.out.println(a+"/"+"("+"("+a+"-"+b+")"+"!"+"*"+b+"!"+")"+"="+calculateN1(a).divide(calculateN1(b)).divide(calculateN1(a-b)));
    
    }
    //计算大数阶乘
    public static BigInteger calculateN1(int n) { 
        if(n==1 || n==0)
        { 
                return BigInteger.valueOf(1); 
        } 
                return BigInteger.valueOf(n).multiply(calculateN1((n-1))); 
    }

    public static BigInteger calculateN2(int n) { 
        if(n==1 || n==0)
        { 
                return BigInteger.valueOf(1); //怀疑这里有问题
        } 
                return BigInteger.valueOf(n).multiply(calculateN1((n-1))); 
    }

    }

运行结果:
       

使用一般的方法用杨辉三角形计算

代码:

package yhsjZH;
import java.util.Scanner;
public class YhsjZH {
//没有使用到会显示叹号
    public static void main(String[] args){
        System.out.println("输入杨辉三角的高度n(整数)");
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        //引用算法
        yhsjZH(a);
    }
    
    public static void yhsjZH(int n){
        int b[][];
        b=new int[n][n];//二维数组不是单纯的int b[n][n];
        //设置第一列全为1
        for(int i=0;i<n;i++){
            b[i][0]=1;
        }
        //中间元素
            for(int i=1;i<n;i++){
                for(int j=1;j<=i;j++){
                    b[i][j]=b[i-1][j-1]+b[i-1][j];
                }
            }
        //输出
            for(int i=0;i<n;i++){
                for(int j=0;j<=i;j++){
                System.out.print(b[i][j]+" ");
                }
                System.out.println(" ");//换行措施output+=/n
            }
    }
}

运行结果:

  

课后作业:使用递推的方法用杨辉三角形计算:

//陶雨洁 信1505-1 20153152
package yhsj;
import java.util.Scanner;
public class Yhsj {
    public static void main(String[] args){
        System.out.println("输入正整数a,b以便求杨辉三角C(a,b),且a为下标:");
        Scanner sc1=new Scanner(System.in);
        int a=sc1.nextInt();
        Scanner sc2=new Scanner(System.in);
        int b=sc2.nextInt();
            if(b>a)
            {
                int c=a;
                a=b;
                b=c;
            }

                System.out.println(yhsjDG(a+1,b)-yhsjDG(a,b-1));
    
    }
    //阶乘计算
    public static long JC(int n) {
        if(n==1 || n==0){
            return 1;
        }
        return n*JC(n-1);
    }
    
public static long yhsjDG(int i,int j) {
    long A= JC(i)/JC(j)/JC(i-j);
    return A;
}
}

运算结果:

使用递归的方法,用组合数递推公式计算:

 代码:

//陶雨洁 信1505-1 20153152
//实验要求:输入一个任意正整数 n计算累加和,并对正数进行判断
package digui;
import java.math.BigInteger;
import java.util.Scanner;
import java.util.*;
public class digui {
    public static void main(String[] args){
        System.out.println("输入正整数n以便求其累加和:");
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        System.out.println(a+"累加和为:"+andsum(a));
        
    }
    //写一个自己的函数
    public static int  andsum(int a)
    {
         if(a==0) return 0;
        else if(a==1) return 1;
         return a+andsum(a-1);
         //这里犯的错误是return放在了if(a!=0&&a!=1)导致andsum没有返回值,第二个错误是andsum()括号中a--之前写成a,然后换行a--
    }
}


运行结果:

 

课后作业:递归编程解决汉诺塔问题(用JAVA实现)

代码:

package hnt;

import java.util.Scanner;

public class HNT {

    public static void main(String[] args) {  
        int nDisks = 3;  
        moveDish(nDisks, \'A\', \'B\', \'C\');  
    }  
    
    public static void moveDish(int level, char from, char inter, char to) {  
        if (level == 1) {  
            System.out.println(from + "上移动" + level + " ----->" + to);  
        } else {  
            moveDish(level - 1, from, to, inter);  
            System.out.println(from + "上移动" + level + " ----->" + to);  
            moveDish(level - 1, inter, from, to);  
        }  
}
}  

运行结果:


课后作业:使用递归方式判断某个字串是否是回文( palindrome

思考:想用两个char数组正序和逆序比较或者递归函数中m++和i--,但是没写出来

代码:

package huiwenshu;
import java.lang.*;
import java.util.Scanner;

public class Huiwenshu {
    public static void main(String[] args){
    //输入字符串string
        System.out.println("输入字符串:");
        Scanner sc1=new Scanner(System.in);
        String x=sc1. nextLine();
    System.out.println(hwsPD(x));

    }
    
    
    public static boolean  hwsPD(String s){
        int i=s.length();
        char[] ch1=s.toCharArray();//转换为字符串
        if(i<1) return false;//<1
        else    if(i==1) return true;//=1
        /*
        char[] ch1=s.toCharArray();//正序
        //逆序转换为字符串
        for(int j=s.length();j>0;j--){    //int m=x.length();利用string自带求字符串长度的方法
            char[] ch2=s.toCharArray();
        }
        for(int m=0;m<s.length();m++){
            if(ch1[m]!=ch2[m]) return  false;
        }
        */
        else  if(s.charAt(0)!=s.charAt(i-1)){
            return false;}
        
        return  hwsPD(s.substring(0,i-1));//这个地方想s.substring(m++,i--)不行
        }    
}

运行结果:

          有点气,肿么办!

悔过:又忘了写注释!

以上是关于Java03动手动脑的主要内容,如果未能解决你的问题,请参考以下文章

03继承与多态 动手动脑

课下作业03-2动手动脑及验证

java中03的动手动脑

动手动脑03

Java11月9日的动手动脑

java 动手动脑7