zoukankan      html  css  js  c++  java
  • 大数据之路day04_1--数组 and for循环进阶

    Java数组

    在开始之前,提一个十分重要的一点:注意:
    在给数组分配内存空间时,必须指定数组能够存储的元素来确定数组大小。创建数组之后不能修改数组的大小,可以使用length属性获取数组的大小。在java数组中,数组只有length属性,并没有字符串的length()方法!!!

    学习Java少不了对数组的学习,也就是说,从这节开始,我们的学习难度慢慢增加,代码思维更加复杂。

    什么数组: 数组是由相同类型的若干项组成的一个数据集合,数组中的每个数据称为元素。

    数组声明格式:(3种)

    1、数据类型[] 数组名称 = new 数据类型[数组大小];

    2、数据类型[] 数组名称 = new 数据类型[]{数组元素};

    3、数据类型[] 数组名称 = {数组元素};

    数组包括 一维数组和多维数组,在这里说一维数组和二维数组。

    一、一维数组

    一维数组的定义和初始化:

    int[] arr = new int[5]; //初始化一个大小为5的一个一维数组。

    int[] arr = new int[]{1,2,3,4,5}; //初始化一个大小为5的一个一维数组,里面的内容为1,2,3,4,5。

    int[] arr = {1,2,3,4,5};  //初始化一个大小为5的一个一维数组,里面的内容为1,2,3,4,5。

    注:具体要使用什么方式初始化,要看题目具体的要求,不做要求的话,个人建议使用第一种,可以自己手动输入里面的元素,也可以进行插入操作。

    例子1:用一个一维数组存储元素并用循环将其输出(注意,数组不能直接输出名字,这样只是输出它指向的地址

     1 package day04;
     2 
     3 public class exer2 {
     4     public static void main(String[] args) {
     5         String[] a = new String[] {"Nike背包","Adudas运动衫","李宁运动鞋","Kappa外套","361°腰包"};
     6         System.out.println("本次活动特价商品有:");
     7         for(int i = 0;i<a.length;i++) {
     8             System.out.println(a[i]);
     9             
    10         }
    11         
    12         /*System.out.println(a);*/
    13         
    14     }
    15     
    16 }

    数组中我们常用的方法有:

    1、数组排序方法  java.util.Arrays.sort();

    例子:初始化一个一维数组,插入一个元素进行排序。

     1 package day04;
     2 
     3 import java.util.Scanner;
     4 
     5 public class exer5 {
     6     // {"a","c","u","b","e","p","f","z"};
     7     public static void main(String[] args) {
     8         Scanner sc = new Scanner(System.in);
     9         String[] s = new String[9];
    10         s[0] = "a";
    11         s[1] = "c";
    12         s[2] = "u";
    13         s[3] = "b";
    14         s[4] = "e";
    15         s[5] = "p";
    16         s[6] = "f";
    17         s[7] = "z";
    18         
    19         System.out.print("元字符序列:");
    20         for(int i =0;i<s.length;i++) {
    21             System.out.print(s[i]+" ");
    22         }
    23         
    24         System.out.println();
    25         System.out.print("待插入的字符是:");
    26         String a = sc.next();
    27         
    28         s[8] = a;
    29         java.util.Arrays.sort(s);
    30         
    31         System.out.print("排序后的序列:");
    32         for(int i =0;i<s.length;i++) {
    33             System.out.print(s[i]+" ");
    34         }
    35         
    36         
    37         
    38         
    39         
    40        
    41         
    42     }
    43 
    44 }

    2、数组转换成字符串的方法  Array.toString();

    例子:从控制台输入5名学生的成绩,用一维数组接收并且将其进行降序排序。

     1 package day04;
     2 
     3 import java.util.Scanner;
     4 
     5 public class exer2_4 {
     6     public static void main(String[] args) {
     7         
     8         int[] stu = new int[5]; 
     9         Scanner sc = new Scanner(System.in);
    10         System.out.print("请输入五名学员的成绩:");
    11         for(int i = 0;i<stu.length;i++) {
    12             int a = sc.nextInt();
    13             stu[i] = a;
    14         }
    15         System.out.println("此时的学生成绩为:");
    16         System.out.println(java.util.Arrays.toString(stu));
    17         
    18         for(int x = 0;x<stu.length;x++) {
    19             for(int y = x;y<stu.length;y++ ) {
    20                 if(stu[x]<stu[y]) {
    21                     int temp = stu[y];
    22                     stu[y] = stu[x];
    23                     stu[x] = temp;
    24                 }
    25             }
    26         }
    27         System.out.println("排序后的学生成绩为:");
    28         System.out.println(java.util.Arrays.toString(stu));
    29         
    30         
    31     }
    32 
    33 }

    输出结果:

     3、数组复制方法 

    System.arraycopy(原数组名称,从原数组哪个地方开始复制,目标数组名称,从目标数组哪个位置开始复制,复制的长度);
     1 package homework;
     2 
     3 public class ArrayDemo4 {
     4 
     5     public static void main(String[] args) {
     6         /*
     7          *数组操作的方法
     8          *
     9          */
    10         
    11         //数组方法---数组复制 System.arraycopy(原数组名称,从原数组哪个地方开始复制,目标数组名称,从目标数组哪个位置开始复制,复制的长度);
    12         int a1[] = new int[] {12,32,43,5,4,43,2};
    13         int a2[] = new int[] {11,22,33,44,55,66};
    14         
    15         System.arraycopy(a1, 3, a2, 1, 3);
    16         
    17         for(int i = 0;i<a2.length;i++) {
    18             System.out.print(a2[i]+" ");  //11 5 4 43 55 66 
    19         }
    20         System.out.println("--------------------");
    21         
    22         //数组排序  java.util.Arrays.sort(数组名称);
    23         int a3[] = new int[] {21,43,54,4,345,65,23,1,32};
    24         java.util.Arrays.sort(a3);
    25         for(int i = 0;i<a3.length;i++) {
    26             System.out.print(a3[i]+" ");
    27         }
    28         
    29         
    30 
    31     }
    32 
    33 }

     二、二维数组

    二维数组的定义和初始化:
    1、int[][] array = {{1,2,3},{4,5,6}};

    2、int[][] array = new int[][]{{1,2,3},{4,5,6}};//数组的个数由后面初始化的实体给出

    3、int[][] array = new int[2][3];

    注意:如果采用第三种的方式初始化,赋值不能直接在后面添加,要利用for循环嵌套进行赋值。

    例子:循环输入顾客商品价格,并且判断有几个商品可以打折。

     1 package day04;
     2 
     3 import java.util.Scanner;
     4 
     5 public class exer2_5 {
     6     public static void main(String[] args) {
     7         int count = 0;
     8         float[][] mans = new float[3][3]; 
     9         Scanner sc = new Scanner(System.in);
    10         for(int i = 0;i<3;i++) {
    11             System.out.println("请输入第"+(i+1)+"个人购物的三件商品的价格:");
    12             for(int j = 0;j<3;j++) {
    13                 float a = sc.nextFloat();
    14                 mans[i][j] = a;
    15                 if(a>300) {
    16                     count++;
    17                 }
    18             }
    19             System.out.println("第"+(i+1)+"个人共有"+count+"件商品享受8折优惠!");
    20             count = 0;
    21             
    22         }
    23         
    24         
    25         
    26         
    27         
    28     }
    29 
    30 }

    三、数组实现冒泡排序、选择排序

    1、冒泡排序

     1 package day04;
     2 
     3 public class MaoPao {
     4     public static void main(String[] args) {
     5         //数组
     6         int[] arr = {5,3,7,2,6,7,6,5,4,1,9,8};
     7         //外部循环
     8         System.out.println("开始第1次遍历对比");
     9         for(int i=0;i<arr.length-1;i++){
    10              //相连两个数的索引是利用内部循环
    11              for(int index=0;index<arr.length-1-i;index++){
    12              //同样利用中间变量,注意区分与选择排序的区分
    13                   if(arr[index]>arr[index+1]){
    14                       int temp=arr[index];
    15                       arr[index]=arr[index+1];
    16                       arr[index+1]=temp;
    17                  }
    18             }
    19              System.out.println(java.util.Arrays.toString(arr));
    20              System.out.println("开始第"+(i+2)+"次遍历对比");
    21         }
    22          System.out.println(java.util.Arrays.toString(arr)); //Arrays.toString() 返回指定数组的内容的字符串表示形式。
    23   }
    24 
    25 }

    冒泡排序是相邻的两两进行比较,如果前一个大于后一个,两两交换位置,使得最终数组成升序的顺序排序。

    2、选择排序

     1 package day04;
     2 
     3 public class Choice {
     4     public static void main(String[] args) {
     5         // 数组
     6         int[] arr = { 5, 3, 7, 2, 6, 7, 6, 5, 4, 1, 9, 8 };
     7         // 第一次循环,是确定一个数依次和后面数的比较的数。
     8         for (int i = 0; i < arr.length - 1; i++) {
     9             // 这个是和第一个数的比较的数
    10             for (int j = i + 1; j < arr.length; j++) {
    11                 // 定义一个临时的变量,用来交换变量
    12                 int temp;
    13                 if (arr[i] > arr[j]) {
    14                     temp = arr[i];
    15                     arr[i] = arr[j];
    16                     arr[j] = temp;
    17                 }
    18                 System.out.println("arr["+i+"]="+arr[i]);
    19                 System.out.println("arr["+j+"]="+arr[j]);
    20                 System.out.println();
    21                 
    22             }
    23         }
    24         // 打印最后的排序结果
    25         System.out.println(java.util.Arrays.toString(arr));
    26     }
    27 
    28 }

    选择排序是由一个开始与所有的进行比较,如果有比它小的,交换位置,然后第二个与后面的进行比较,如此比下去,进行交换,使得最终数组成升序的顺序进行排序

    四、For循环进阶

    利用for循环,实现较为复杂的图形,更好的理解for循环的执行过程。

    例子1、实现正直角三角形,手动输入三角形的高,每一行为奇数

     1 package day04;
     2 
     3 import java.util.Scanner;
     4 
     5 public class exer2_1 {
     6     public static void main(String[] args) {
     7         Scanner sc = new Scanner(System.in);
     8         System.out.print("输入直角三角形的高:");
     9         int height = sc.nextInt();
    10         for(int i = 0;i<height;i++) {
    11             for(int j = 0;j<2*i+1;j++) {
    12                     System.out.print("*");    
    13             }
    14             System.out.println("");
    15         }
    16     }
    17 }

    运行结果:

     例子2、实现倒直角三角形,手动输入三角形的高,每一行为奇数

     1 package day04;
     2 
     3 import java.util.Scanner;
     4 
     5 public class exer2_2 {
     6     public static void main(String[] args) {
     7         Scanner sc = new Scanner(System.in);
     8         System.out.print("输入直角三角形的高:");
     9         int height = sc.nextInt();
    10         for(int i = 0;i<height;i++) {
    11             for(int j = i;j<height;j++) {
    12                     System.out.print("*");    
    13             }
    14             System.out.println("");
    15         }
    16     }
    17 
    18 }

    运行结果:

      例子3、实现正等腰三角形,手动输入三角形的高,每一行为奇数

     1 package day04;
     2 
     3 import java.util.Scanner;
     4 
     5 public class exer2_3 {
     6     public static void main(String[] args) {
     7         Scanner sc = new Scanner(System.in);
     8         System.out.print("输入直角三角形的高:");
     9         int height = sc.nextInt();
    10         for (int i = 0; i < height; i++) {
    11             for (int j = 0; j < height - i - 1; j++) {
    12                 System.out.print(" ");
    13             }
    14             for (int k = 0; k < (i * 2 + 1); k++) {
    15                 System.out.print("*");
    16             }
    17             System.out.println("");
    18         }
    19        
    20     }
    21 
    22 }

    运行结果:

  • 相关阅读:
    vijos 1894 セチの祈り
    luogu p1378 经验之谈
    審視自己
    高斯消去法的相關拓展
    通用汇点
    重征之战
    有文化的人吟了一句诗
    2016年7月总结
    BZOJ 1026: [SCOI2009]windy数
    BZOJ 1047: [HAOI2007]理想的正方形
  • 原文地址:https://www.cnblogs.com/wyh-study/p/11814391.html
Copyright © 2011-2022 走看看