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();
}
}
}