ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础学习day3---数组

2021-06-19 09:04:11  阅读:126  来源: 互联网

标签:Java int day3 System --- 数组 array public out


数组

数组的定义、赋值和输出

public class Demo1 {
   public static void main(String[] args) {
       int[] nums;//首选定义
       int nums2[];
       nums = new int[10];
       //从键盘输入十个数据
       for(int i=0;i<10;i++){
           System.out.println("请输入第"+(i+1)+"个数据:");
           Scanner scanner = new Scanner(System.in);
           if(scanner.hasNextInt()){
               nums[i]=scanner.nextInt();
          }
      }
       //打印数组中的元素
       for (int i=0;i<10;i++){
           System.out.println(nums[i]);
      }
  }
}

Java内存

在声明时,数组并没有产生。在栈中会存放基本变量类型以及引用对象的变量(会存放这个引用在堆里面的具体地址)。在堆中会存放new的对象和数组(数组的本身就是对象),可以被所有的线程共享,不会存放别的对象引用。

初始化

public class Demo2 {
   public static void main(String[] args) {
       //静态初始化:创建+赋值
       int[] array = {1,2,3,4,5};
      //动态初始化:包含默认初始化
       int[] array2;
       array2 = new int[20];
       array2[5]=1;
       System.out.println(array2[5]);
       System.out.println(array2[0]);//没赋值的默认为0
       Man[] men = {new Man(),new Man()};//引用类型数组,有Man类
  }
}

使用

public class Demo3 {
   public static void main(String[] args) {
       int[] arrays = {1,2,3};
       //增强型for循环遍历,无法获取下标
       for (int array:arrays) {
           System.out.println(array);
      }
       printArrays(arrays);
       int[] reverse=reverseArrays(arrays);
       printArrays(reverse);
  }
   //打印数组
   public static void printArrays(int[] arrays){
       for(int i=0;i<arrays.length;i++){
           System.out.println(arrays[i]);
      }
  }
   //反转数组
   public static int[] reverseArrays(int[] arrays){// 返回值类型应该设置成数组类型 int[]
      int[] result = new int[arrays.length];
       for (int i=0,j=arrays.length-1;i< arrays.length;i++,j--){
           result[i]=arrays[j];
      }
       return result;

  }
}

注意点:

  • 当数组作为返回值时,需要将返回值类型设置成数组类型

     

Arrays类

public class Demo4 {
   public static void main(String[] args) {
       int[] a={5,9,7,8,10,20};
       System.out.println(a);//[I@1b6d3586 哈希值
       //打印数组元素Arrays.toString
       System.out.println(Arrays.toString(a));//[5, 9, 7, 8, 10, 20]
       //数组排序
       Arrays.sort(a);
       System.out.println(Arrays.toString(a));
       //赋值 0~3之间的元素全为4 0包括3不包括
       Arrays.fill(a,0,3,4);
       System.out.println(Arrays.toString(a));
  }
}

其它方法可以去帮助文档查看

稀疏数组

当一个数组中大部分元素都是同一个数值时,用稀疏数组来保存该数组。

处理方式:

  1. 记录数组的行列数和不同数值的个数

  2. 把不同数值和所在的行列坐标放到另一个小规模的数组中

    public class Demo6 {
       public static void main(String[] args) {
           //定义一个棋盘 12x12   1表示白棋 2表示黑棋
           int[][] arrays1;
           arrays1 = new int[12][12];
           arrays1[2][2]=1;
           arrays1[3][3]=2;
           printChessBoard(arrays1);
           //记录不同值的个数
           int count=0;
           for(int i=0;i<arrays1.length;i++){
               for(int j=0;j<arrays1[i].length;j++){
                    if(arrays1[i][j]!=0)
                       count++;
              }
          }
           //声明一个稀疏数组
           int[][] arrays2;
           arrays2 = new int[count+1][3];
           arrays2[0][0]=12;
           arrays2[0][1]=12;
           arrays2[0][2]=count;
           //遍历棋盘找到不同值的行列值
           int sum=0;
           for(int i=0;i<arrays1.length;i++){
               for(int j=0;j<arrays1[i].length;j++){
                   if(arrays1[i][j]!=0){
                       sum++;
                   arrays2[sum][0]=i;
                   arrays2[sum][1]=j;
                   arrays2[sum][2]=arrays1[i][j];
                  }
              }
          }
           printArray(arrays2);
           int[][] result;
           result = recover(arrays2);
           printArray(result);

      }
       //打印棋盘
       public static void printChessBoard(int[][] array){
           for(int i=0;i<array.length;i++){
               for(int j=0;j<array[i].length;j++){
                   System.out.print(array[i][j]+" ");
              }
               System.out.println("\n");
          }
      }
       //输出稀疏数组
       public static void printArray(int[][] array){
           for(int i=0;i<array.length;i++){
               for(int j=0;j<array[i].length;j++){
                   System.out.print(array[i][j]+" ");
              }
               System.out.println("\n");
          }
      }
       //根据稀疏数组还原棋盘
       public static int[][] recover(int[][] array){
           //建立一个数组来存放棋盘
           int[][] result ;
           result = new int[array[0][0]][array[0][1]];
           //定义一个row变量,用来给与稀疏数组中所表示非零值的行列值相同位置赋非零值
           int row=1;
           //稀疏数组的具体行数无法得知,但是可以通过稀疏数组第一行第三个元素来判断,总行数就是不同元素个数再加1。
           //稀疏数组的最后一行的行数就是给棋盘数组赋值的外循环次数,列数同理。这样可以防止在给棋盘赋值是出现数组下标越界的问题
           for(int i=0;i<=array[array[0][2]][0];i++){
               for(int j=0;j<=array[array[0][2]][1];j++){
                   if(i==array[row][0]&&j==array[row][1]){
                       result[i][j]=array[row][2];
                       row++;
                  }else{
                       result[i][j]=0;
                  }
              }
          }
           return result;
      }
    }

标签:Java,int,day3,System,---,数组,array,public,out
来源: https://www.cnblogs.com/kanx1blog/p/14901984.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有