当前位置: 首页 > article >正文

Java【数组】

数组是一组类型相同的数据(基本类型或引用类型)的集合,数组中每个数据称为元素。数组也是Java的对象,一旦创建,数组长度就固定了。

创建数组

1.声明一个数组类型的引用变量(数组变量),但是不能指定数组长度

int[] scores;     //合法
String names[];   //合法

//int scores[30]; //非法

可以用符号“...”声明数目可变参数

//有一个max()方法要从一组int类型的数组中找出最大值,但是数组的数目不固定(2~6之间)
public class Varable{
  public static int max(int... datas){ //datas为可变参数
    if(datas.length == 0)
      return -1;  //为传入任何参数
 
    int result = 0;
    for(int a: datas)
      if(result<a)
        result=a;
    
    return result;
  }
  
  public static void main(String[] args){
    System.out.println(max(5));
    System.out.println(max(5,8,9,3));
    System.out.println(max(new int[]{4,10,7,3}));  //传入数组
    System.out.println(max());
  }
}

2.用new创建数组对象

  • 按大小为数组分配内存
  • 为每个数组元素赋予数字类型的默认值
  • 返回数组对象的引用
int[] scores = new int[50];
System.out.println(scores[0]);    //打印0
String[] names = new String[50];
System.out.println(names[0]);     //打印null

数组初始化

int[] x = new int[]{5,6,7,8,9};     //合法
//int[] x = new int[5]{5,6,7,8,9};  //非法,不能在[]中指定数组长度

int[] y = new int[5];
for(int i=0; i<y.length; i++)
  y[i] = y.length - i;   //合法

访问数组

//遍历数组
/**报数Game:有编号的玩家轮流报数1~3,每次报道3的出局,按顺序进行,问最后剩下的是哪个玩家
   1、isActive数组记录玩家是否在圈内,若isActive[i]=false,那么编号为i+1的玩家已出局
   2、为了跟踪报数状态:定义了三个变量
         size:表示当前在圈内的玩家数
         count:表示当前的报数,为3时,会将其置0
         point:当前正在报数的玩家在isActive数组中的索引位置,为n时,重置0 */

public class Game{
  public static int play(int n){
    boolean[] isActive = new boolean[n];    //记录每个玩家是否在圈

    //初始化开局玩家信息
    for(int i = 0; i < isActive.length; i++)
      isActive[i] = true;

    int size = n;     //圈内玩家数
    int count = 0;    //当前报数
    int point = 0;    //当前报数玩家的索引

    while(size > 1){  //循环报数至圈内只剩下一人
      if(isActive[point]){  //当前轮到的玩家在圈内
        count++;  //报下一个数
        if(count == 3){     //如果当前报数已到3,处理count、isActive[point]
          count = 0;
          isActive[point] = false;  //玩家出局
          size--;     //玩家规模减一
        }
      }

      point++;    //轮到下一个报数人
      if(point == n) //如果以及轮完一圈
         point = 0;  //从第一个玩家开始再来报数
    }

    int last = 0;
    for(int i = 0; i < n; i++)
      if(isActive[i])
        last = i + 1;
    
    return last;
  }
   
  public static void main(String[] args){
    System.out.println(play(20));  //打印
  }
}

多维数组

//求转置矩阵
public class Reversal{
  public static int[][] change(int[][] from){
    int rows = from.length;     //原始矩阵行数
    int cols = from[0].length;  //原始矩阵列数
    int[][] to = new int[cols][rows];  //转置后矩阵

    for(int i = 0; i < from.length; i++)  //循环行
        for(int j = 0; j < from[i].length; j++)  //循环列
          to[j][i]=from[i][j];
    
    return to;
  }

  public static void main(String[] args){
    int[][] from = {{11,22,33,44},
                    {55,66,77,88},
                    {99,92,23,38}};
    int[][] to = change(from);

    for(int i = 0; i < from.length; i++){ 
        for(int j = 0; j < from[i].length; j++)  
          System.out.print(to[i][j]+" ");
        
        System.out.println();
    }
  }
}


http://www.kler.cn/a/291847.html

相关文章:

  • CarWatchdog
  • 基于Springboot人口老龄化社区服务与管理平台【附源码】
  • Unity 圆形循环复用滚动列表
  • MySQL 的事务与锁机制详解
  • vue 文本域 展示的内容格式要和填写时保持一致
  • 手机便签哪个好用?手机桌面便签app下载推荐
  • Docker占用根目录/存储空间过多如何清理?
  • windows@命令行安装国内软件@scoop和winget安装国内软件
  • 设计模式—2—单例模式
  • 【C++ 第二十章】模拟实现 shared_ptr(可以拷贝的智能指针)
  • 【Ubuntu20.04】配置深度学习环境
  • 机器学习周报(8.26-9.1)
  • 【C++ Primer Plus习题】9.3
  • C# 删除Word文档中的段落
  • Golang 内存泄漏详解:原因、检测与修复
  • 【论文阅读】LLM4CP: Adapting Large Language Models for Channel Prediction(2024)
  • 啄木鸟上门安装维修系统源码开发
  • 【个人笔记】VCS工具与命令
  • 钢铁百科:Q420DR力学性能、Q420DR执行标准、Q420DR低温容器钢板
  • 自己设计的QT系统,留个档
  • Docker 容器编排之 Docker Compose
  • Arcgis将图层转shape文件
  • 【大数据】DataX深度解析:数据同步的神器是如何工作的?
  • Android Gradle 插件的说明
  • AI生成图片,ChatGPT生成路虎女逆行打人插图。
  • 语音测试(一)ffmpeg视频转音频