• 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--)不行
            }    
    }

    运行结果:

              有点气,肿么办!

    悔过:又忘了写注释!

  • 相关阅读:
    点分治练习
    PKU-2723 Get Luffy Out(2-SAT+二分)
    tarjan求割点与割边
    tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows
    数算日子荣耀神
    《JavaScript DOM编程艺术》笔记
    CSS链接的样式a:link,a:visited,a:hover,a:active
    chrome调试技巧--持续更新
    CSS文字大小单位PX、EM的区别
    【转】如何成为一名优秀的web前端工程师(前端攻城师)?
  • 原文地址:https://www.cnblogs.com/Amyheartxy/p/5966036.html
Copyright © 2020-2023  润新知