Java知识详细巩固_note2(数组_附demo code)

Java基础知识的全面巩固_note1(附各种demo code)
拜读《核心技术卷》,笔记之。

提纲

1.1 for each循环
1.2 数组初始化以及匿名数组
1.3 数组拷贝(以及Arrays.copyOf())
1.4 命令行参数
1.5 数组排序
1.6 多维数组
1.7 不规则数组

1.数组

声明:

9125154-b0dd262bc8af9cd5.png

以及:
9125154-8f28139491d0f5be.png

1.1 for each循环
for(variable:collection) statement
9125154-ca3aa22762474fbd.png

例如:

for(int element : a)
    System.out.println(element);

打印数组a的每一个元素,一个元素占一行。
另外:

9125154-07c9d4fe40708cef.png

 System.out.println(Arrays.toString(a));
1.2 数组初始化以及匿名数组

9125154-35ec4eeb6b4324de.png

!!注意使用这种语句时,不需要调用new。


匿名数组:

9125154-3bb3599d3e46e6ee.png

9125154-faed6bb4c2148043.png

在Java中,允许数组长度为0。可用于方法的返回结果为空数组的情况:
9125154-bdcda1d5529d41a6.png

1.3 数组拷贝

1)

9125154-4b16d71327ecbd73.png

如图所示显示了拷贝的结果:
9125154-a036eabc6115f3d7.png

2)
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法:

9125154-c8e5757e33cf41c2.png

3)
9125154-acedd5d75defd0ac.png

4)

9125154-a12125392ef70477.png

下面上一个Demo:

package Test;
//import java.lang.Math;
import java.util.Arrays;
//import java.util.Date;
//import java.util.Scanner;


public class Havaatry {

    public static void main(String[] args)
       {
        int[] a = {3,2,5,6,9,8,4,0};
        int[] b = Arrays.copyOf(a, 16);
        int[] c = Arrays.copyOf(a, 3);
        boolean[] A = {true,true,true,true,true};
        boolean[] B = Arrays.copyOf(A, 16);
        boolean[] C = Arrays.copyOf(A, 3);
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));
        System.out.println(Arrays.toString(c));
        System.out.println(Arrays.toString(A));
        System.out.println(Arrays.toString(B));
        System.out.println(Arrays.toString(C));
       }

}

运行结果:

[3, 2, 5, 6, 9, 8, 4, 0]
[3, 2, 5, 6, 9, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[3, 2, 5]
[true, true, true, true, true]
[true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false]
[true, true, true]
1.4 命令行参数
9125154-ff51722643991361.png
9125154-b72bf1619bb81fe2.png

9125154-9d258289501cae2f.png
1.5 数组排序

9125154-1f81ce8d16fc4fce.png

下面上一个Demo,它产生一个抽奖游戏中的随机数值组合。假如抽奖是从49个数值中抽取6个,那么程序可能的输出结果为:
9125154-c32acb9b6f2255dc.png

9125154-1e8e7d810e7b67b5.png

现在,就可以开始抽取k个数值了。Math.random方法将返回一个[0,1) 之间的随机浮点数。用n乘以这个浮点数,就可以得到 [0,n) 之间的一个随机数,用(int) 强制转换类型,则是一个 [0,n-1] 的随机数。
9125154-9e729fdf19676992.png

9125154-ae4223eae4ef10bc.png

Demo code:

package Test;
//import java.lang.Math;
import java.util.Arrays;
//import java.util.Date;
import java.util.Scanner;


public class Havaatry {

    public static void main(String[] args)
       {
        Scanner in = new Scanner(System.in);

          System.out.print("How many numbers do you need to draw? ");
          int k = in.nextInt();

          System.out.print("What is the highest number you can draw? ");
          int n = in.nextInt();

          // fill an array with numbers 1 2 3 . . . n
          int[] numbers = new int[n];
          for (int i = 0; i < numbers.length; i++)
             numbers[i] = i + 1;

          // draw k numbers and put them into a second array
          int[] result = new int[k];
          for (int i = 0; i < result.length; i++)
          {
             // make a random index between 0 and n - 1
             int r = (int) (Math.random() * n);

             // pick the element at the random location
             result[i] = numbers[r];

             // move the last element into the random location
             numbers[r] = numbers[n - 1];
             n--;
          }

          // print the sorted array
          Arrays.sort(result);
          System.out.println("Bet the following combination. It'll make you rich!");
          for (int r : result)
             System.out.println(r);
       }

}

结果:

How many numbers do you need to draw? 5
What is the highest number you can draw? 12
Bet the following combination. It'll make you rich!
2
6
7
8
9

关键API:

9125154-c26a511554889bf8.png

9125154-c556254695e1c3b0.png

1.6 多维数组
9125154-cd742903943fe619.png

9125154-515411c67ef12895.png

9125154-b315617258e08667.png

9125154-2b8b0121d14fbf1f.png

9125154-a611abbf9d6d8cd1.png

9125154-0283b91c530872cb.png

下面上完整代码:

package Test;
//import java.lang.Math;
import java.util.Arrays;
//import java.util.Date;
import java.util.Scanner;


public class Havaatry {

    public static void main(String[] args)
       {
         final double STARTRATE = 10;
          final int NRATES = 6;
          final int NYEARS = 10;

          // set interest rates to 10 . . . 15%
          double[] interestRate = new double[NRATES];
          for (int j = 0; j < interestRate.length; j++)
             interestRate[j] = (STARTRATE + j) / 100.0;

          double[][] balances = new double[NYEARS][NRATES];

          // set initial balances to 10000
          for (int j = 0; j < balances[0].length; j++)
             balances[0][j] = 10000;

          // compute interest for future years
          for (int i = 1; i < balances.length; i++)
          {
             for (int j = 0; j < balances[i].length; j++)
             {
                // get last year's balances from previous row
                double oldBalance = balances[i - 1][j];

                // compute interest
                double interest = oldBalance * interestRate[j];

                // compute this year's balances
                balances[i][j] = oldBalance + interest;
             }
          }

          // print one row of interest rates
          for (int j = 0; j < interestRate.length; j++)
             System.out.printf("%9.0f%%", 100 * interestRate[j]);

          System.out.println();

          // print balance table
          for (double[] row : balances)
          {
             // print table row
             for (double b : row)
                System.out.printf("%10.2f", b);

             System.out.println();
          }
       }

}

运行结果:

9125154-5623b704a50c1804.png

另外:关于for each 以及 deepToString()

9125154-5bd755f410c08fae.png

1.7 不规则数组

1)
Java实际上没有多维数组,只有一位数组:

9125154-d8c0cb08af679273.png

例如,在前面的实例中,balances数组实际上是一个包含10个元素的数组,而每个元素又是一个由6个浮点数组成的数组。如图:

9125154-5163ac640bf0b00e.png


2)


9125154-6bbbab8f23507ab0.png

3)由于可以单独地存取数组的某一行,所以可以让两行交换:

9125154-ddc29d04c9c1c6ff.png


4)

9125154-f7c0a02017e6fba2.png

也即i中取j的组合算法,这个三角形也即杨辉三角。

编程思路:

9125154-ab5d269042415835.png

9125154-034b0e44700d5d04.png

代码:

package Test;
//import java.lang.Math;
import java.util.Arrays;
//import java.util.Date;
import java.util.Scanner;


public class Havaatry {

    public static void main(String[] args)
       {
         final int NMAX = 10;

          // allocate triangular array
          int[][] odds = new int[NMAX + 1][];
          for (int n = 0; n <= NMAX; n++)
             odds[n] = new int[n + 1];

          // fill triangular array
          for (int n = 0; n < odds.length; n++)
             for (int k = 0; k < odds[n].length; k++)
             {
                /*
                 * compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)
                 */
                int lotteryOdds = 1;
                for (int i = 1; i <= k; i++)
                   lotteryOdds = lotteryOdds * (n - i + 1) / i;

                odds[n][k] = lotteryOdds;
             }

          // print triangular array
          for (int[] row : odds)
          {
             for (int odd : row)
                System.out.printf("%4d", odd);
             System.out.println();
          }
       }
}

运行结果:

   1
   1   1
   1   2   1
   1   3   3   1
   1   4   6   4   1
   1   5  10  10   5   1
   1   6  15  20  15   6   1
   1   7  21  35  35  21   7   1
   1   8  28  56  70  56  28   8   1
   1   9  36  84 126 126  84  36   9   1
   1  10  45 120 210 252 210 120  45  10   1

杨辉三角组合律:

9125154-b9e61442baff6f72.png

另外:

9125154-7685ef83bdb073bc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌川江雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值