大数据之路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 }

运行结果:

原文地址:https://www.cnblogs.com/wyh-study/p/11814391.html