1. /*
  2. 从键盘确定班级的组号,在从键盘输入每一组的人数,并输入每一个学员的成绩,并求出,每一组的平均分,
  3. 全部的平均分,每一组的最高分,全部的最高分,并显示结果.
  4.  
  5. */
  6. class Test3{
  7. public static void main(String[] args){
  8.  
  9. java.util.Scanner input = new java.util.Scanner(System.in);
  10.  
  11. //先确定一共有多少个组;
  12. System.out.print("请输入一共有多少个组:");
  13. int groups = input.nextInt();
  14.  
  15. int[][] scores = new int[groups][]; //如5个组,+ 人数
  16.  
  17. //遍历输入每个组的人数
  18.  
  19. for(int i = 0;i < scores.length;i++){
  20.  
  21. System.out.print("请输入第" + (i+1) +"组的人数:");
  22. int num = input.nextInt();
  23. scores[i] = new int[num]; //确定每 i 行的列数 <==> 相当于一维数组;
  24.  
  25. }
  26.  
  27. //遍历scores二维数组,输入成绩即填充列数,默认值为0 ;
  28. for(int i = 0; i < scores.length;i++){
  29. for(int j = 0;j < scores[i].length;j++){
  30. System.out.print("请输入第"+ (i+1) +"组" + "第"+ (j+1) + "个学员的成绩:");
  31. int score = input.nextInt();
  32. scores[i][j] = score;
  33. }
  34. System.out.println();
  35. }
  36. //每个组和班级的平均分
  37. int sumAll = 0;
  38. int countAll = 0;
  39. for(int i = 0; i < scores.length;i++){
  40. int sumGroup = 0; //每循环一次就会赋0 -->可求出每组的成绩
  41. int countGroup = 0;
  42. for(int j = 0;j < scores[i].length;j++){
  43. sumAll += scores[i][j];
  44. countAll++;
  45.  
  46. sumGroup += scores[i][j];
  47. countGroup++;
  48. }
  49. System.out.println("第" + (i+1) + "组的总分为:" + sumGroup + "\t" + "第" + (i+1) + "组的平均分为:" + sumGroup/countGroup);
  50. }
  51. System.out.println("全班总分为:" + sumAll + "\t" + "全班平均分为:" + sumAll/countAll);
  52.  
  53. //求每个组和班级的最高分
  54. int max_ban = 0;
  55. for(int i = 0;i < scores.length;i++){
  56. int max_zu = 0;
  57. //int max_ban = 0;
  58. for(int j = 0;j < scores[i].length;j++){
  59.  
  60. if(scores[i][j] > max_zu){
  61. max_zu = scores[i][j];
  62. }
  63. if(scores[i][j] > max_ban){
  64. max_ban = scores[i][j];
  65. }
  66.  
  67. }System.out.println("第" + (i+1) + "组的最高分为:" + max_zu);
  68.  
  69. }System.out.println("全班最高分为:" + max_ban);
  70.  
  71. }
  72. }

数组的复制

  1. /*
  2. (1)已知一个数组存储了成绩
  3. int[] scores = {67,89,23,45,99};
  4. 要让你把,所有不及格的成绩找出来,放到一个数组中
  5. 结果:{23,45}
  6.  
  7. (1)先统计不及格的有几个人,count个
  8. (2)新建数组 int[] low = new int[count];
  9. (3)再遍历scores,把不及格的复制到low数组中
  10. */
  11.  
  12. class ArrayCopy{
  13. public static void main(String[] args){
  14. int[] scores = {67,89,23,45,99};
  15. int count = 0;
  16. for(int i = 0;i < scores.length; i++){
  17. if(scores[i] < 60){
  18. count++;
  19. }
  20. }
  21. int[] low = new int[count];
  22.  
  23. for(int i = 0,j = 0; i < scores.length && j<count; i++){ //&& j<count不写也可以不会超范围;
  24. if(scores[i] < 60){
  25. //j = i;//i=2, 3
  26. low[j] = scores[i]; //这里是关键啊啊
  27. j++;
  28. }
  29. }
  30.  
  31. //for(int i = 0;i<low.length;i++){
  32. //System.out.println(low[i]);
  33. //}
  34. for(int num : low){
  35. System.out.print("不及格的有:" + num + "\n");
  36. }
  37. }
  38. }

二分查找(前提是有顺序的)

使用二分查找算法查找字符串数组中  {"a","b","c","d","e","f","g","h"} g的元素。

  1. * String类型:
  2. * 1)重写了equals方法
  3. * 2)实现了java.lang.Comparable接口
  4. * 这个接口的抽象方法 int compareTo(String str)
  5. */
  6. public class Test19 {
  7. public static void main(String[] args) {
  8. String[] arr = {"a","b","c","d","e","f","g","h"};
  9. String find = "g";
  10.  
  11. int left = 0;
  12. int right = arr.length-1;
  13. int mid = (left + right)/2;
  14. int index = -1;
  15.  
  16. while(left<=right){
  17. if(arr[mid].equals(find)){
  18. index = mid;
  19. break;
  20. }else if(find.compareTo(arr[mid])>0){//find比arr[mid]大,去mid的右边查找
  21. left = mid +1;
  22. }else{
  23. right = mid - 1;
  24. }
  25. mid = (left + right)/2;
  26. }
  27. System.out.println("g的下标是:" +index);
  28. }
  29. }
  1. //二分法
  2. class BinarySearch{
  3. public static void main(String [] args){
  4. int[] arr = {0,1,2,5,8,9,12,17,20};
  5. //int[] arr = {1,2,5,8,9,12,17,20};
  6. int index = -1;
  7. int find = 5;
  8. int left = 0;
  9. int right = arr.length - 1;
  10. int mid = (left + right) /2;
  11.  
  12. while(left <= right){ //left left left left
  13. if(arr[mid] == find){//找到了
  14. index = mid;
  15. break;
  16. }else if(find < arr[mid]){//说明find在[mid]的左边
  17. right = mid-1;
  18. }else{//说明find在[mid]的右边
  19. left = mid + 1;
  20. }
  21. mid = (left + right)/2;
  22. }
  23. if(index==-1){
  24. System.out.println("未找到");
  25. }else{
  26. System.out.println("下标:" + index);
  27. }
  28. }
  29. }

冒泡排序(把大的往右边移动-下沉;把小的往左移动-冒泡)

  1. /*
  2. 冒泡排序:
  3. 从小到大
  4.  
  5. //1、先照我这个写
  6. //2、如果我要求,每一轮从最后一个元素开始比较
  7. //我刚才,相当于把“大”往“右”移动
  8. //现在,把“小”往“左”移动
  9. /*
  10. 冒泡排序:实现从小到大
  11. (1)方法一:把“大”往“右”移动,称为“下沉”
  12. (2)方法二:把“小”往“左”移动,称为“冒泡”
  13.  
  14. */
  15.  
  16. class BubbleSort{
  17. public static void main(String[] args){
  18. int[] arr = {3,9,4,2,1,8,6}; //6
  19.  
  20. //从小到大:通过相邻元素的比较, 大的往后移动称为 下沉;
  21.  
  22. for(int i = 1;i < arr.length-1;i++ ){
  23. for(int j = 0;j < arr.length-1;j++){
  24. if(arr[j] > arr[j+1]){
  25. int temp = 0;
  26. temp = arr[j];
  27. arr[j] = arr[j+1];
  28. arr[j+1] = temp;
  29. }
  30. }
  31. }for(int i = 0; i < arr.length; i++){
  32. System.out.print(arr[i] + "\t");
  33. }
  34.  
  35. }
  36. }
  37.  
  38. ---->>>
  39. 1 2 3 4 6 8 9
  1. class BubbleSort{
  2. public static void main(String[] args){
  3. int[] arr = {3,9,4,2,1,8,6}; //6
  4.  
  5. //从小到大:把 小 的往 左 移动;称为"冒泡"。
  6. for(int i = 0; i < arr.length;i++){
  7. for(int j = arr.length-1; j > i;j--){
  8. if(arr[j] < arr[j-1]){ //如果后边的arr[j] < 前边的arr[j-1]
  9. int temp = 0;
  10. temp = arr[j-1];
  11. arr[j-1] = arr[j];
  12. arr[j] = temp;
  13. }
  14. }
  15. }for(int i = 0;i < arr.length;i++){
  16. System.out.print(arr[i] + "\t");
  17. }
  18. }
  19. }
  20.  
  21. ---->>>
    1       2       3       4       6       8       9
  1. package com.atguigu.exam;
  2.  
  3. import java.util.Arrays;
  4.  
  5. public class Test20 {
  6. public static void main(String[] args) {
  7. int[] array = {4,3,6,1};
  8. sort(array);
  9. System.out.println(Arrays.toString(array));
  10. }
  11.  
  12. public static void sort(int[] arr){
  13. //轮数:n-1
  14. for (int i = 1; i < arr.length; i++) {
  15. //每一轮从左往右比较
  16. /*
  17. * 当i=1,j=0,1,2,...arr.length-2 j<arr.length-i
  18. */
  19. for (int j = 0; j < arr.length-i; j++) {
  20. if(arr[j] > arr[j+1]){
  21. int temp = arr[j];
  22. arr[j] = arr[j+1];
  23. arr[j+1] = temp;
  24. }
  25. }
  26. }
  27. }
  28. }

直接选择排序

  1. /*
  2.  
  3. 直接选择排序-->>
  4. 思路:
  5. 每一轮找出本轮未排序元素中的最小值,然后和它应该在的位置的元素交换
  6.  
  7. 例如:
  8. 第一轮:最小值是1,它的位置[4],它应该在[0],[4]和[0]位置元素交换 {1,2,7,9,4,6}
  9. 第二轮:最小值是2,它的位置[1],它应该在[1],不动 {1,2,7,9,4,6}
  10. 第三轮:最小值是4,它的位置[4],它应该在[2],[4]和[2]位置元素交换 {1,2,4,9,7,6}
  11. 第四轮:最小值是6,它的位置[5],它应该在[3],[5]和[3]位置元素交换 {1,2,4,6,7,9}
  12. 第五轮:最小值是7,它的位置[4],它应该在[4],不动
  13. */
  14.  
  15. class TestSelectSort{
  16. public static void main(String[] args){
  17. int[] arr = {4,2,7,9,1,6};
  18. //外循环:5轮
  19. //i的循环值:0,1,2,3,4 i<arr.length-1
  20. for(int i = 0; i <arr.length-1;i++){
  21. //找出本轮的最小值及其下标
  22. //(1)先假设“本轮未排序部分”的第一个元素最小
  23. int min = arr[i];
  24. int index = i;
  25.  
  26. //(2)用min 和 "剩余的元素" 进行比较,确定本轮的最小值; 从i+1开始比较,到最后;
  27. /*
  28. 第一轮:未排序部分 [0,5],min=arr[0],index=0,j=1,2,3,4,5
  29. 第二轮:未排序部分 [1,5],min=arr[1],index=1,j=2,3,4,5
  30. 第三轮:未排序部分 [2,5],min=arr[2],index=2,j=3,4,5
  31. 第四轮:未排序部分 [3,5],min=arr[3],index=3,j=4,5
  32. 第五轮:未排序部分 [4,5],min=arr[4],index=4,j=5
  33. */
  34.  
  35. for(int j = i+1; j < arr.length; j++){
  36. if(min > arr[j]){
  37. min = arr[j];
  38. index = j;
  39. }
  40. }
  41.  
  42. //(3)把[index]位置的元素和它应该在的位置交换
  43. /*
  44. 第一轮,最小值应该在[0],第一轮i=0
  45. 第二轮,最小值应该在[1],第一轮i=1
  46. 第三轮,最小值应该在[2],第一轮i=2
  47. 第四轮,最小值应该在[3],第一轮i=3
  48. 第五轮,最小值应该在[4],第一轮i=4
  49. */
  50. if(index != i){ //如果arr[index],即本轮的最小值,不在它应该在的位置[i],就要交换
  51. int temp = arr[index];
  52. arr[index] = arr[i];
  53. arr[i] = temp;
  54. }
  55. }
  56. for(int num : arr){
  57. System.out.print(num); //
  58. }
  59.  
  60. }
  61. }

Practice| 数组的更多相关文章

  1. PAT (Basic Level) Practice 1008 数组元素循环右移问题

    个人练习 一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N−1​​)变换为(A​N−M​​⋯A​N ...

  2. PAT (Basic Level) Practice 1008 数组元素循环右移问题 分数 20

    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN ...

  3. PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)

    题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808 #include <iost ...

  4. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  5. ConCurrent in Practice小记 (1)

    ConCurrent in Practice小记 (1) 杂记,随书自己写的笔记: 综述问题 1.线程允许在同一个进程中的资源,包括共享内存,内存句柄,文件句柄.但是每个进程有自己的程序计数器,栈和局 ...

  6. C++类实现三维数组算法

    在学习北京大学教授的<程序设计实习 / Practice on Programming>中,遇到了一个习题,花了很长时间研究,现在分享出来: 课题地址:https://class.cour ...

  7. Java RGB数组图像合成 ImageCombining (整理)

    /** * Java RGB数组图像合成 ImageCombinning (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * 注意事项: * 1.本程序为java程序,同时感谢您花费 ...

  8. 双数组Trie树 (Double-array Trie) 及其应用

    双数组Trie树(Double-array Trie, DAT)是由三个日本人提出的一种Trie树的高效实现 [1],兼顾了查询效率与空间存储.Ansj便是用DAT(虽然作者宣称是三数组Trie树,但 ...

  9. java对象数组的概述和使用

    1 public class Student 2 { 3 // 成员变量 4 private String name; 5 private int age; 6 7 // 构造方法 8 public ...

随机推荐

  1. JMeter 中_time 函数的使用(时间戳、当前时间)

    有时在接口测试时,其参数需要为时间戳或者是日期格式的数据.针对此问题,可以使用JMeter自带的_time 函数来解决以上问题 操作步骤: 1.通过函数助手,生成一个_time 函数: 2.如果参数为 ...

  2. CodeCraft-19 and Codeforces Round #537 (Div. 2) 题解

    传送门 D. Destroy the Colony 首先明确题意:除了规定的两种(或一种)字母要在同侧以外,其他字母也必须在同侧. 发现当每种字母在左/右边确定之后,方案数就确定了,就是分组的方案数乘 ...

  3. 判断js数据类型的四种方法,以及各自的优缺点(转)

    转载地址:https://blog.csdn.net/lhjuejiang/article/details/79623973 数据类型分为基本类型和引用类型: 基本类型:String.Number.B ...

  4. mybatis 按in 函数参数顺序排序

    使用 FIELD()函数 SELECT *  FROM   user  WHERE id IN (72, 80, 69)  ORDER BY FIELD(id, 72, 80, 69)

  5. Linux下的启动oracle的EM的命令

    Linux下的启动oracle的EM的命令 1.启动数据库 su - oracle $sqlplus / as sysdba sql>startup 2.启动监听 $lsnrctl LSNRCT ...

  6. Confluence 6 禁用管理员联系表单

    如果你希望禁用这个功能,不允许用户通过发送电子邮件的方式联系站点管理员.你可以禁用这个页面中有关输入用户信息发送电子邮件的部分.你只能禁用用户电子邮件输入表单,如果你按照上面描述的步骤在 'Custo ...

  7. Confluence 6 编辑一个站点装饰文件

    希望编辑一个站点的 decorator 文件: 进入  > 基本配置(General Configuration) > 布局(Layouts )(在Look and Feel 菜单下面) ...

  8. spring mvc底层(DispacherServlet)的简单实现

    使用过spring mvc的小伙伴都知道,mvc在使用的时候,我们只需要在controller上注解上@controller跟@requestMapping(“URL”),当我们访问对应的路径的时候, ...

  9. k倍区间

    看大佬的代码看了半天,终于算是懂了 标题: k倍区间 给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就 ...

  10. BeautifulSoup的基本用法

    # -*- coding:UTF-8 -*- from urllib import request from bs4 import BeautifulSoup import re import sys ...