1. 定义一个二维数组,找出最大值,打印最大值所有坐标
定义二维数组:
int[][] a=new int[5][5];
二维数组的行数和列数:
行数:array.length
列数:array[0].length
示例:
public class DoubleArray{
public static void main(String[] args){
int[][] a=new int[5][5];
for(int i=0;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
a[i][j]=(int)(Math.random()*10);
}
}
int maxi=0;
int maxj=0;
int count=0;
for(int i=0;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
if(count%5!=0){
System.out.print(a[i][j]+" ");
count++;
}
else {
System.out.print("\n");
System.out.print(a[i][j]+" ");
count++;
}
if(a[maxi][maxj]<a[i][j]){
maxi=i;
maxj=j;
}
}
}
System.out.println("\nThe maximun number of the array: "+a[maxi][maxj]+"\n其坐标为:("+maxi+","+maxj+")");
}
}
但这种实现方式还是有点问题,就是只能打印出一个最大值的坐标,我们可以定义一个数组,来保存最大值坐标的数组,具体的方式是:
public class LargestNumberIndex {
public static void main(String[] args) {
//init an array.
int[][] a=new int[][] {{1,2,3},{3,2,1}};
// get the largest number. countMax: 最大值的个数
int maxi = 0, maxj = 0, countMax = 1;
for(int i=0;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
if(a[maxi][maxj] < a[i][j]){
maxi = i;
maxj = j;
countMax = 1;
}
else if(a[maxi][maxj] == a[i][j]) {
countMax += 1;
}
}
}
// 记录所有最大值的下标
int[] maxNumi=new int[countMax];
int[] maxNumj=new int[countMax];
for(int i=0;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
if(a[maxi][maxj] == a[i][j]){
maxi = i;
maxj = j;
countMax -= 1;
maxNumi[countMax] = i;
maxNumj[countMax] = j;
}
}
}
// 输出结果
for(int i=0;i<maxNumi.length;i++){
//System.out.println(a[maxNumi[i]][maxNumj[i]]);
System.out.println("\nThe maximun number of the array: "+
a[maxNumi[i]][maxNumj[i]] + "\n其坐标为:(" + maxNumi[i] + "," + maxNumj[i] + ")");
}
}
}
效果:
The maximun number of the array: 3
其坐标为:(1,0)
The maximun number of the array: 3
其坐标为:(0,2)
2.二维数组清零
方法一:遍历赋值0
//全部清零
for(int j = 0;j<arg.length-1;j++){
arg[j]=0;
}
方法二:指向空指针
//空指针
arg = null;
错误方法: 定义clear 方法
public void Clear_array(arr)
{
arr = null;
}
论坛上说,这种方法只有针对有指针的语言才有用,否则只是清空形参,没有用。
参考: