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动手动脑的主要内容,如果未能解决你的问题,请参考以下文章