冒泡排序

数组笔记 - 图1

二分查找

适用范围:只能用于有序数组数据;如果数组不是有序数据,需要先对数组进行排序,然后再做二分查找

数组笔记 - 图2

多维数组

数组笔记 - 图3

数组笔记 - 图4

两数之和暴力解法

  1. //暴力法:两层遍历,先确定一个数为X,然后寻找数组中是否有与target - X相等的元素
  2. for(int i=0;i<nums.length;i++) {
  3. for(int j=i+1;j<nums.length;j++) {
  4. if(nums[i]!=nums[j]&&nums[j]==target-nums[i]) {
  5. System.out.println("下标分别为"+i+","+j);
  6. }
  7. }
  8. }

选队长游戏任务

  1. package array_homework;
  2. import java.util.Scanner;
  3. public class Choose_leader {
  4. /**
  5. * 今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举 一个人作为出游的临时队长。
  6. * 为了体现合理公平,大家提出了一个比较有趣的 规则。所有人围成一圈,顺序排号。
  7. * 从第一个人开始报数(从 1 到 3 报数), 凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。
  8. * 请你通过编写程序,求出一组人中的队长是原来第几位同学。
  9. * @param args
  10. */
  11. /*
  12. * 题解:
  13. * 1.一开始将所有人都设置为True,表示在圈中,如果退出圈子,就把他设置为False
  14. * 2.结束条件:总数只剩一个人
  15. * 3.围成1圈:令i从0开始递增,当i=n时,将i重新赋值为1即可。
  16. */
  17. public static void main(String[] args) {
  18. while(true){
  19. // 第一步,设计用户输入,确定人数,并初始化数组
  20. int n;
  21. System.out.println("请输入活动人数:");
  22. Scanner input = new Scanner(System.in); //扫描用户输入
  23. n = input.nextInt();
  24. //创建布尔型数组
  25. boolean[] nums = new boolean[n];
  26. //初始化数组
  27. //因为一开始所有人都在圈内,所以全部元素都是True.
  28. for(int i=0;i<n;i++) {
  29. nums[i]=true;
  30. }
  31. //第二步,报数与出圈操作
  32. //1.定义并初始化变量: 剩余人数leftNum(从N开始,当left只剩1的时候游戏结束);
  33. //报数变量number(初始化为0);循环统计次数index(用于绕成圈,初始化为0,当其等于n时复位为1)
  34. int leftNum = n;//剩余人数
  35. int number = 0;//报数变量(每到3后重置为1)
  36. int index = 0;//数组元素索引
  37. //结束游戏条件:只剩一个人
  38. while(leftNum>1) {
  39. //每次循环开始之前先统计还有多少人在圈内,即统计每轮需要报数的人数
  40. if(nums[index]==true) {
  41. number++;
  42. //踢人:用需要报数的人数对3取模
  43. //当模为0时,首先把number重置为0,实现123123这样的重复报数,然后要把元素的值设置为0;
  44. //最后对剩余人数做减法,因为循环判断条件需要用到。
  45. if(number%3==0) {
  46. number = 0;
  47. nums[index]=false;
  48. leftNum--;
  49. }
  50. }
  51. index++;//每循环一次,索引需要加1
  52. //实现数组变成绕圈
  53. //形成一圈的原理: 所有人都遍历后,重新开始,
  54. if(index==n) {
  55. index=0;
  56. }
  57. }
  58. //寻找剩余的队长
  59. for(int i=0;i<n;i++) {
  60. if(nums[i]==true) {
  61. System.out.println("队长是原来的第" + (i+1) + "位同学");
  62. System.out.println("--------------");
  63. }
  64. }
  65. }
  66. }
  67. }

双色球彩票训练任务

  1. package array_homework;
  2. import java.util.Random;
  3. import java.util.Scanner;
  4. /**
  5. * 1. 系统随机生成 6 个 1—33 的数字(代表红色球)+1 个 1—16 数字(代 表蓝色球)。
  6. * 2. 请用户输入 6 个不重复的 1—33 数字(代表红色球)+1 个 1—16 数字 (代表蓝色球)。
  7. * 3.分别设置蓝色和红色球中奖统计变量blue_Counts,red_Counts;数组的话,用双循环遍历查找相同个数
  8. * 4. 对比确认获得几等奖。
  9. * @author Administrator
  10. *
  11. */
  12. public class Two_color_ball {
  13. public static void main(String[] args) {
  14. // 1.定义数组
  15. //系统随机
  16. int[] system_red = new int[6];
  17. int system_blue=0;
  18. //用户输入
  19. int[] user_red = new int[6];
  20. int user_blue = 0;
  21. //2.系统随机生成数字
  22. Random numsRandom = new Random();
  23. //生成蓝球
  24. system_blue = numsRandom.nextInt(16)+1;
  25. //生成红球
  26. int index = system_red.length;
  27. int inputRandom = 0;
  28. int k = 0;
  29. while (index>0) {
  30. //exist为自定义方法
  31. if (exist(system_red, inputRandom)||exist(system_red, system_blue)) {
  32. //在数组中存在或者与生成的蓝球号码相同,则更换一个随机数
  33. inputRandom = numsRandom.nextInt(33)+1;
  34. }else {
  35. //在数组中不存在
  36. system_red[k] = inputRandom;
  37. k++;
  38. index--;
  39. }
  40. }
  41. //3.用户输入数字
  42. //用户输入红球号码
  43. System.out.println("请用户输入 6 个不重复的 1—33 数字:");
  44. Scanner input = new Scanner(System.in);
  45. for(int i=0;i<6;i++) {
  46. user_red[i]=input.nextInt();
  47. }
  48. //用户输入蓝球号码
  49. System.out.println("请用户输入1 个 1—16 数字(不能与刚才的数字相同):");
  50. user_blue=input.nextInt();
  51. //4.打印用户输入号码和中奖号码
  52. //用户红球号码
  53. System.out.print("你购买的红球号码是:");
  54. for(int i=0;i<6;i++) {
  55. System.out.print(user_red[i]+",");
  56. }
  57. //用户篮球号码
  58. System.out.println("你购买的蓝球号码是:"+user_blue);
  59. //系统红球号码
  60. System.out.print("红球的中奖号码是:");
  61. for(int i=0;i<6;i++) {
  62. System.out.print(system_red[i]+",");
  63. }
  64. //系统蓝球号码
  65. System.out.println("蓝球的中奖号码是:"+system_blue);
  66. //5.判断中奖
  67. //定义中奖号码数的统计变量
  68. int red_Counts = 0; //红球号码匹配个数
  69. int blue_Counts = 0; //蓝球号码匹配个数
  70. //判断蓝球中奖个数
  71. if(system_blue == user_blue) {
  72. blue_Counts = 1;
  73. }
  74. //判断红球中奖个数
  75. for(int i=0;i<6;i++) {
  76. for(int j=0;j<6;j++)
  77. if(system_red[i] == user_red[j]) {
  78. red_Counts++;
  79. }
  80. }
  81. //判断中几等奖
  82. System.out.println("-----------");
  83. System.out.println("红球中奖数为:"+red_Counts+",蓝球中奖数为:"+blue_Counts);
  84. if(red_Counts==6 & blue_Counts==1) {
  85. System.out.println("恭喜你中了一等奖");
  86. }
  87. else if(red_Counts==6 & blue_Counts==0) {
  88. System.out.println("恭喜你中了二等奖");
  89. }
  90. else if(red_Counts==5 & blue_Counts==1) {
  91. System.out.println("恭喜你中了三等奖");
  92. }
  93. else if((red_Counts==5 & blue_Counts==0) || (red_Counts==4 & blue_Counts==1)) {
  94. System.out.println("恭喜你中了四等奖");
  95. }
  96. else if((red_Counts==4 & blue_Counts==0) || (red_Counts==3 & blue_Counts==1)) {
  97. System.out.println("恭喜你中了五等奖");
  98. }
  99. else if((red_Counts==2 & blue_Counts==1) || (red_Counts==1 & blue_Counts==1) || (red_Counts==0 & blue_Counts==1)) {
  100. System.out.println("恭喜你中了六等奖");
  101. }
  102. else {
  103. System.out.println("很抱歉,你没中奖,欢迎支持中国福利彩票事业");
  104. }
  105. }
  106. /**
  107. * 看数组里是否有与准备存入的随机数相同的数
  108. * @param system_red
  109. * @param inputRandom
  110. * @return
  111. */
  112. private static boolean exist(int[] system_red, int inputRandom) {
  113. for(int i=0;i<system_red.length;i++) {
  114. if(system_red[i]==inputRandom) {
  115. return true;
  116. }
  117. }
  118. return false;
  119. }
  120. }