• Day4 数组


    双重for循环

    外循环控制行,内循环控制列。

    //乘法表
    for(int i = 1; i <= 9; i++) {
         for(int j = 1; j <= i ;j++) {
             System.out.print(j+"*"+i+"="+(i*j)+"	");
         }
         System.out.println();
    }

    DecimalFormat

    #:一个数字

    0:一个数字,不够位数用0补位

    DecimalFormat f = new DecimalFormat("###.##");
    DecimalFormat f = new DecimalFormat("000.00000");
    System.out.println(sum);
    System.out.println(f.format(sum));
    System.out.println(f.format(34.567));

    break 

    用在 switch和循环中。
    用在单层循环中,用来结束循环。

    continue

    用在循环中。
    作用 结束本次循环进行下一次循环条件判断。

    对于双重循环,可以自定义一个标签,break或continue 到标签处。

    一维数组 

    Java 语言中提供的数组是用来存储固定大小的同类型元素。

    声明数组

    首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

    int[] arr;//声明数组,告诉计算机我要存储一组整数(推荐)
    或
    //int arr[];
    int x1,x2,x3;//声明了3个int类型的变量
    int [] n1,n2,n3;//声明了3个数组
    int num1 [],num2,num3;//声明了一个int类型的数组num1,两个Int类型的变量。

    创建数组

    arr = new int[6];//创建一个数组,计算机在内存中分配6个空间,并初始化
    

    数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arr.length-1。

    数组初始化

    //动态初始化:我们制定长度,系统赋值。
    int[] arr = new int[5];//0
    //初始值
    //整数:0  小数:0.0  布尔:false  char:000  
    //String:null  
    //静态初始化:我们赋值,系统分配长度(arr2.length)
    int[] arr2 = {11,22,33};

    赋值数组

    arr[2]=33;

    栈stack

    • 是作为构思算法的辅助工具,不是完全的数据存储工具。是插入和删除操作被限制在表的线性表。
    • 只能从栈顶入栈,也只能从栈顶出站
    • 是一种后进先出的结构

    遍历数组

    普通for循环

    public class TestArray {
       public static void main(String[] args) {
          double[] myList = {1.9, 2.9, 3.4, 3.5};
     
          // 打印所有数组元素
          for (int i = 0; i < myList.length; i++) {
             System.out.println(myList[i] + " ");
          }
          // 计算所有元素的总和
          double total = 0;
          for (int i = 0; i < myList.length; i++) {
             total += myList[i];
          }
          System.out.println("Total is " + total);
          // 查找最大元素
          double max = myList[0];
          for (int i = 1; i < myList.length; i++) {
             if (myList[i] > max) max = myList[i];
          }
          System.out.println("Max is " + max);
       }
    }

    增强for循环

    public class TestArray {
       public static void main(String[] args) {
          double[] myList = {1.9, 2.9, 3.4, 3.5};
     
          // 打印所有数组元素
          for (double element: myList) {
             System.out.println(element);
          }
       }
    }

    增强for循环的特点:

    【1】简洁

    【2】不能制定范围访问,只能访问全部

    【3】不能反转输出,只能正序访问

    【4】不能修改数组元素的值

    数组排序

    冒泡排序

     1 package day4;
     2 
     3 public class Demo12 {
     4 
     5     public static void main(String[] args) {
     6         // 冒泡排序
     7         int[] arr = {34,1,78,9,43};
     8         int temp;
     9         for(int i = 0 ; i < arr.length-1;i++) {//
    10             for(int j = 0; j < arr.length-1-i; j++) {//
    11                 if(arr[j] > arr[j+1]) {
    12                     temp = arr[j];
    13                     arr[j]= arr[j + 1];
    14                     arr[j + 1] = temp;
    15                 }
    16             }
    17         }
    18         for(int n: arr) {
    19             System.out.println(n);
    20         }
    21         
    22     }
    23 
    24 }
    View Code

    选择排序

     1 package day4;
     2 
     3 import java.util.Arrays;
     4 
     5 public class Demo13 {
     6 
     7     public static void main(String[] args) {
     8         // 选择排序
     9         int [] arr = {5,12,3,78,345};
    10         int temp;
    11         for(int i = 0; i < arr.length-1; i++) {//位置
    12             for(int j = i + 1; j < arr.length; j++) {
    13                 if(arr[i] > arr[j]) {
    14                     temp = arr[i];
    15                     arr[i] = arr[j];
    16                     arr[j] = temp;
    17                 }
    18             }
    19         }
    20         for(int n:arr) {
    21             System.out.println(n);
    22         }
    23 //        System.out.println(Arrays.toString(arr));
    24     }
    25 
    26 }
    View Code

    数组查找方法

    普通查找方法(效率比较低)

     1 public class ArrayTest {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stub
     5         int[] arr = {4,6,8,33,66,44,99,54};
     6         int num=searchKey(arr,66);
     7         System.out.println(num);
     8     }
     9     //查找一个元素在数组中的第一次出现的位置
    10     public static int searchKey(int[] arr,int key) {
    11         for(int i=0;i<arr.length;i++) {
    12             if(arr[i] == key) {
    13                 return i;
    14             }
    15         }
    16         return -1;//-1代表的是交表不存在的情况
    17     }
    18 }
    View Code

    二分查找法(效率比较高)

     1 public class binarySearch {
     2     public static void main(String[] args) {
     3         int[] arr = {9,12,15,24,36,41,59,68};
     4         int num =searchArray(arr,12);
     5         System.out.println(num);
     6     }
     7     //二分查找。前天:数组必须是有序的。
     8     /*
     9      * 思路:
    10      * 1.通过角标先获取中间角标上的元素
    11      * 2.让该元素和要找的数据比较。
    12      * 3.如果要找的数大了,缩小范围,要找的范围应该是 中间的角标+1---尾角标
    13      *   如果要找的数效率,要找的范围   头角标---中间角标-1。
    14      * 4.不断如此重复,就可以找到元素对应的角标。
    15      * */
    16     public static int searchArray(int[] arr,int key) {
    17         int max,min,mid;
    18         min = 0;
    19         max = arr.length-1;
    20         mid = (min+max)>>1;
    21         while(arr[mid]!=key) {
    22             if(key > arr[mid]) {
    23                 min = mid + 1;
    24             }else{
    25                 max = mid - 1;
    26             }
    27             //判断元素是否存在。
    28             if(max<min) {
    29                 return -1;
    30             }
    31             mid = (min+max)>>1;
    32         }
    33         return mid;
    34     }
    35 }
    View Code
     1 public class ArrayTest1 {
     2     public static void main(String[] args) {
     3         int[] arr = {9,12,15,24,36,41,59,68};
     4         int num =binarySearch(arr,44);
     5         System.out.println(num);
     6     }
     7     //二分查找。前天:数组必须是有序的。
     8     /*
     9      * 思路:
    10      * 1.通过角标先获取中间角标上的元素
    11      * 2.让该元素和要找的数据比较。
    12      * 3.如果要找的数大了,缩小范围,要找的范围应该是 中间的角标+1---尾角标
    13      *   如果要找的数效率,要找的范围   头角标---中间角标-1。
    14      * 4.不断如此重复,就可以找到元素对应的角标。
    15      * */
    16     public static int binarySearch(int[] arr,int key) {
    17         //定义单个变量,记录头角标,尾角标,中间角标
    18         int max,min,mid;
    19         min = 0;
    20         max = arr.length-1;
    21         while(min<=max) {
    22             mid = (min+max)>>1;
    23             if(key > arr[mid]) {
    24                 min = mid + 1;
    25             }else if(key < arr[mid]) {
    26                 max = mid - 1;
    27             }else {
    28                 return mid;
    29             }
    30         }
    31         return -1;
    32     }
    33 }
    View Code

    数组的复制

     1 package cn.java.study;
     2 
     3 import java.util.Arrays;
     4 
     5 public class Demo5 {
     6     public static void main(String[] args) {
     7         int[] arr1 = {1,4,6,83,45};
     8         int[] arr2 = new int[arr1.length];
     9         //              源数组    源数组起始位置  目标数组  目标数组起始位置 复制长度
    10         System.arraycopy(arr1, 1, arr2, 2, 3);
    11         System.out.println(Arrays.toString(arr2));
    12     }
    13 }
    View Code

    常用API之Arrays类

     1 package cn.java.study;
     2 //工具类
     3 import java.util.Arrays;
     4 
     5 public class Demo5 {
     6     public static void main(String[] args) {
     7         //Arrays
     8         int[] arr = {1,4,7,434,232,55};
     9         //将数组转换成字符串
    10         System.out.println(Arrays.toString(arr));
    11         //对数组进行升序排序
    12         Arrays.sort(arr);
    13         System.out.println(Arrays.toString(arr));
    14         //排序数组名  排序数组元素开始位置  排序数组元素结束位置(实际上,取到终止位置减一)[起始位置,终止位置)
    15         Arrays.sort(arr,2,4);
    16         System.out.println(Arrays.toString(arr));
    17         //多核处理器下并行操作使用
    18         Arrays.parallelSort(arr);
    19         //二分查找下标,数组   查找的数字,返回的是插入点,没有的话返回的是负的插入点减一的值
    20         System.out.println(Arrays.binarySearch(arr, 8));
    21         //数组比较:元素的个数和对应位置的数组元素相同
    22         int[] arr1 = {1,2,5};
    23         int[] arr2 = {1,2,5};
    24         System.out.println(Arrays.equals(arr1, arr2));
    25         //数组的填充,将数组中所有的元素替换为666
    26         Arrays.fill(arr, 666);
    27         System.out.println(Arrays.toString(arr));
    28         //数组的复制,返回的是一个数组,  (要复制的数组,几个元素)
    29         int[] arr3 = Arrays.copyOf(arr1, 2);
    30         System.out.println(Arrays.toString(arr3));
    31     }
    32 }
    View Code

    二维数组

    格式1:

    int[][] arr = new int[3][2];
    • 定义了名称为arr的二位数组
    • 二维数组中有3个一维数组
    • 每一个一维数组中有2个元素
    • 一维数组的名称分别为arr[0],arr[1],arr[2]
    • 给第一个一维数组1角标位赋值为666的写法是:arr[0][1] = 666;

    System.out.println(arr); // [[Ie6f7d2二位数组实体   e6f7d2是哈希值,[是数组,[[二位数组

    格式2:

    int[][] arr = new int[3][];
    arr[0] = new int[3];
    arr[1] = new int[1];
    arr[2] = new int[2];

  • 相关阅读:
    wcdb中使用rowid做查询条件
    [转载]Linux下断开SSH连接后,让程序继续在后台执行
    Mac OS X wants to use the “system” keychain 的解决方案
    wcdb的主键和唯一性
    type(),dir(),getattr(),hasattr(), isinstance()用法
    获取昨天日期
    二分法
    三次握手和四次挥手
    py2和py3之间的不同
    flask 接收参数小坑
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8043234.html
Copyright © 2020-2023  润新知