[关闭]
@Sarah 2015-11-05T17:37:54.000000Z 字数 4522 阅读 1599

JAVA 数组 函数 递归

002 数组与函数

java笔记

数组

定义数组
方法1
int[] score={10,8,5,4,};
方法2
int[] score=new int[10];
score[0]=
score1=

若不知道数字长度,
.length

随机数
Math,random()
得到0.0~1.0内的随机数,按照需求再*10或者100...

冒泡排序

两个数a、b交换:设一个新的数值k
a=k
b=a
b=k

二维数组

定义&显示数组

  1. int[][] i=new int[5][6];
  2. for(int j=0;j<i.length;j++)
  3. for(int k=0;k<i[0].length;k++)
  4. i[j][k]=.random();

不规则数组

  1. int[][]i=new int[5][];
  2. for(int j=0;j<i.length;i++)
  3. i[j]=new int[];

强制格式转换

  1. int)(Math,random(i))

函数

  1. static void f(int i){}
  2. // 静态 无返回值 函数名(形参)

调用的时候 是实参

递归

把一个问题变成几个小问题
f(10)=10*f(9)
f(9)=9*f(8)

把光标放在括回后面,对应的前一个括号会显示框
用tab自动显示位置
用右键-source-format调整格式

上课案例

  1. //1计算π/4=1-1/3+1/5-1/7+…,直到最后一项值小于10-8
  2. public class PI {
  3. public static void main(String[] args) {
  4. double result = 1;
  5. double i = 1;
  6. boolean flag = true;
  7. while (true) {
  8. i += 2;
  9. if (flag == true) {
  10. result -= 1 / i;
  11. flag = false;
  12. } else {
  13. result += 1 / i;
  14. flag = true;
  15. }
  16. if (1 / i < 0.000000001)
  17. break;
  18. }
  19. System.out.println(4*result);
  20. }
  1. //统计一组成绩中的最高分、最低分、平均分以及及格率。
  2. public class score {
  3. public static void main(String[] args) {
  4. int[] score =new int[100];
  5. int max = -1, min = 100;
  6. int sum = 0;
  7. int count = 0;
  8. for (int i = 0; i < score.length; i++) {
  9. score[i]=(int)(Math.random()*100);
  10. //强制类型转换为int
  11. }
  12. for (int i = 0; i < score.length; i++) {
  13. if (score[i] > max) {
  14. max = score[i];
  15. }
  16. if (score[i] < min)
  17. min = score[i];
  18. sum = sum + score[i];
  19. if (score[i] >= 60) {
  20. count++;
  21. }
  22. }
  23. System.out.println("max:"+max);
  24. System.out.println("min:"+min);
  25. System.out.println("average:"+(float)sum/score.length);
  26. System.out.println("rate:"+(float)count/score.length);
  27. }
  28. }
  1. //冒泡排序
  2. public class BubleSort {
  3. public static void main1(String[] args) {
  4. // TODO Auto-generated method stub
  5. int[] score =new int[100000];
  6. int m=1;
  7. for (int i = 0; i < score.length; i++) {
  8. score[i]=(int)(Math.random()*100);
  9. }
  10. for (int i = 0; i < score.length-1; i++) {
  11. // for (int j = 0; j < score.length; j++) {
  12. // System.out.print(score[j] +"\t");
  13. // }
  14. // System.out.println();
  15. for (int j = 0; j < score.length-m; j++) {
  16. if (score[j]>score[j+1]) {
  17. int k=score[j];
  18. score[j]=score[j+1];
  19. score[j+1]=k;
  20. }
  21. }
  22. m++;
  23. }
  24. // for (int i = 0; i < score.length; i++) {
  25. // System.out.print(score[i] +"\t");
  26. // }
  27. }
  28. //用M能够减少循环次数,这样到最后几次就不用每次都从头比较到尾。

此处输入图片的描述

  1. //随机生成不规则的数组
  2. public static void main(String[] args) {
  3. int[][] i=new int[(int)(Math.random()*10+1)][];
  4. for (int j = 0; j < i.length; j++) {
  5. i[j]=new int[(int)(Math.random()*10+1)];
  6. }
  7. for (int j = 0; j < i.length; j++) {
  8. for (int j2 = 0; j2 < i[j].length; j2++) {
  9. i[j][j2]=(int)(Math.random()*100);
  10. System.out.print(i[j][j2]+ " \t");
  11. }
  12. System.out.println();
  13. }
  14. }
  15. }

例如:
58 82 30 68
60 7 94 29 78
15
74 96 98 42 19 57 27
44 35 84 80
56 17 45 25 72 68 61 9 63 39
5 44 49 31 1 74 75 27
41

  1. //函数 求i的j次方
  2. static long power(int i,int j){
  3. long k=1;
  4. for (int m = 0; m < j; m++) {
  5. k=k*i;
  6. }
  7. return k;
  8. //调用
  9. System.out.println(power(5,7));

函数就是函数 要输出的时候单独输出 不要把输出写进函数里

  1. //递归求10的累乘
  2. static long f(int i){
  3. // System.out.println("calling i="+i);
  4. if (i<2) {
  5. return 1;
  6. }
  7. else {
  8. return i*f(i-1);
  9. }
  10. }
  11. System.out.println(f(10));
  12. //注意这里并没有i--

习题

  1. // *计算1!+2!+3!+…+n!
  2. //用递归,f(n)=n*n+f(n-1)
  3. public class factor {
  4. public static void main(String[] args) {
  5. System.out.println(f(4));
  6. }
  7. static int f(int i){
  8. if (i<2) {
  9. return 1;
  10. }
  11. else {
  12. return i*i+ f(i-1);
  13. }
  14. }
  15. }

参考读取键盘输入数值教程

  1. // *计算m!<n,其中n由键盘输入
  2. import java.util.Scanner;
  3. public class mLessThanN {
  4. public static void main(String[] args) {
  5. int m = 5;
  6. long k = 1;
  7. for (int i = 1; i <= m; i++) {
  8. k = k * i;
  9. }
  10. //求m!
  11. Scanner sc = new Scanner(System.in);
  12. System.out.println("请输入n:");
  13. int n = sc.nextInt();
  14. //读取n
  15. if (k > n)
  16. System.out.println("True");
  17. else
  18. System.out.println("False");
  19. }
  20. //判断m!<n
  21. }
  1. public class BuyChicken {
  2. public static void main(String[] args) {
  3. // 公鸡每只5元,母鸡每只3元,小鸡3只1元,若用100元买100只鸡,则公鸡、母鸡、小鸡各能买多少?
  4. //当前代码需要修改,输出结果数字不对。
  5. for (int m = 0; m <=20; m++) {
  6. for (int f= 0; f<=33; f++) {
  7. for (int l = 0; l<=100; l++) {
  8. if (m+f+l==100&&5*m+3*f+l/3==100) {
  9. System.out.println("m="+m);
  10. System.out.println("f="+f);
  11. System.out.println("l="+l);
  12. }
  13. }
  14. }
  15. }
  16. }
  17. }
  1. public class chickenAndRabbit {
  2. public static void main(String[] args) {
  3. // 鸡兔同笼,共有98个头386只脚,请用穷举法计算出鸡、兔各为多少只?
  4. for (int chicken = 0; chicken <98; chicken++) {
  5. for (int rabbit = 0; rabbit <96; rabbit++) {
  6. if (chicken+rabbit==98&&2*chicken+4*rabbit==386) {
  7. System.out.println("chicken="+chicken);
  8. System.out.println("rabbit="+rabbit);
  9. }
  10. }
  11. }
  12. }
  13. }
  1. public class Fibonacci {
  2. //输出斐波那契数列前20个数
  3. int kk;
  4. public static void main(String[] args) {
  5. int kk;
  6. kk=0;
  7. for (int i = 1; i<=20; i++) {
  8. System.out.println(f(i));
  9. }
  10. }
  11. public static int f (int n) {
  12. //System.out.println(n);
  13. if (n==1||n==2) {
  14. return 1;
  15. }
  16. else {
  17. return f(n-1)+f(n-2);
  18. }
  19. }
  20. int tt;
  21. }
  1. public class findBigNumber {
  2. public static void main(String[] args) {
  3. // [从键盘输入]若干数(输入0结束),找出其中的最大数
  4. int max = -1;
  5. int[] i =new int[(int)(Math.random()*100)];
  6. for (int j = 0; j < i.length; j++) {
  7. i[j]=(int)(Math.random()*100);
  8. if ( i [j]==0) {
  9. break;
  10. }
  11. if (i[j] > max) {
  12. max = i[j];
  13. }
  14. }
  15. System.out.println("max="+max);
  16. }
  17. }
  1. public class KingPromise {
  2. // public static void main(String[] args) {
  3. // 国王的许诺:20+21+22+23+…+263(1立方米=1.42e8),264-1
  4. static long f(int i) {
  5. if (i == 0) {
  6. return 1;
  7. } else {
  8. return f(i - 1) + f(i - 1) *2;
  9. }
  10. }
  11. static double power(int i,int j){
  12. double k=1;
  13. for (int m = 0; m < j; m++) {
  14. k=k*i;
  15. }
  16. return k;
  17. }
  18. public static void main(String[] args) {
  19. double sum=0;
  20. for (int k = 0; k < 64; k++) {
  21. sum=sum+power(2, k);
  22. System.out.println(k+":"+sum);
  23. }
  24. }
  25. }

```

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注