----------------------android培训、java培训、期待与您交流! ----------------------
数组在java中用的比较多,所以总结下数组的查找和二维数组。
(1)查找
A:无序数组
public static int getIndex(int[] arr,int value)
{
for(int i=0; i<arr.length; i++)
{
if(arr[i]==value)
{
return i;
}
}
//当循环结束,说明元素在数组中不存在
return -1;
}
B:有序数组 二分查找(必须是有序的)
public static int getIndex(int[] arr,int value)
{
int min = 0;
int max = arr.length - 1;
int mid = (min+max)/2;
while(arr[mid]!=value)
{
if(arr[mid]>value)
{
max = mid - 1;
}
else if(arr[mid]<value)
{
min = mid + 1;
}
//如果没有怎么办?min max
if(min>max)
{
return -1;
}
mid = (min+max)/2;
}
return mid;
}
2:二维数组
(1)int[][] arr = new int[3][2];
A:定义了名称为arr的二维数组
B:二维数组中有3个一维数组
C:每一个一维数组中有2个元素
D:一维数组的名称分别为arr[0], arr[1], arr[2]
arr:二维数组名
arr[1]:二维数组中的第二个数组名
arr[1][1]:二维数组中的第二个数组的第二个元素
E:给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
(2)格式2:int[][] arr = new int[3][];
A: 二维数组中有3个一维数组
B: 每个一维数组都是默认初始化值null
C: 可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
(3)int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
A:二维数组有3个一维数组。
B:第一个一维数组有3个元素
第一个一维数组有2个元素
第一个一维数组有4个元素
(4)二维数组的遍历
public static void printArray2(int[][] arr2)
{
for(int i=0; i<arr2.length; i++)
{
for(int j=0; j<arr2[i].length; j++)
{
System.out.print(arr2[i][j]+" ");
}
System.out.println();
}
}
二维数组的应用
数学黑洞问题
import java.util.Scanner;
public class BlackHole {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n % 1111 == 0){
return;
}
while(n!=6174){
//把整数转为数组
int[] a = intToArray(n);
//对数组进行排序
java.util.Arrays.sort(a);
//根据排序后的数组,获得最小值
int min = arrayToMin(a);
//根据排序后的数组,获得最大值
int max = arrayToMax(a);
System.out.println(max + "-" + min + "=" + (max-min) );
n = max - min;
}
}
public static int[] intToArray(int n){
int[] a = new int[4];
a[0] = n/1000;
a[1] = n/100%10;
a[2] = n/10%10;
a[3] = n%10;
return a;
}
public static int arrayToMin(int[] a){
return a[0]*1000 + a[1] * 100 + a[2] * 10 + a[3];
}
public static int arrayToMax(int[] a){
return a[3]*1000 + a[2] * 100 + a[1] * 10 + a[0];
}
}
螺旋填空
package chp4;
import java.util.Scanner;
public class LuoXuan{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int[][] a = new int[m][n];
int col=0, row = 0;
a[row][col] = 1;
int[][] direction = {
{0, 1}, //右
{1, 0}, //下
{0, -1},//左
{-1, 0} //上
};
int directIndex = 0; //用来标识方向,一开始为右
for(int i = 2; i<= m*n; i++){
//按照之前的方向,计算下一个坐标
row = row + direction[directIndex][0];
col = col + direction[directIndex][1];
//如果计算所得的坐标超出了范围
if ( ( row >=m || row <0 )
||(col >=n || col <0)
|| (a[row][col] != 0) ){
//复原
row = row - direction[directIndex][0];
col = col - direction[directIndex][1];
//换成下一个方向
directIndex++;
if (directIndex == 4) directIndex = 0;
//计算新坐标
row = row + direction[directIndex][0];
col = col + direction[directIndex][1];
}
a[row][col] = i;
}
printMultiArray(a);
}
public static void printMultiArray(int[][] a){
for(int i = 0; i<a.length; i++){
for(int j = 0; j<a[i].length; j++){
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
}
}
----------------------android培训、java培训、期待与您交流! ----------------------