一、二维数组
定义二维数组的格式:
格式1:
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数
举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素
格式2:
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3]
arr[2] = new int[1];
格式3:
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
举例:
int[][] arr = {{1,2,3},{4,6},{6}};
练习题:
A:给定数组,int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}完成遍历操作,要求最终[1,2,3,4,5,6,7,8,9]
B:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
C:打印杨辉三角形(行数可以键盘录入)
--------------------------------------我是一条华丽的分割线--------------------------------
答案篇:
A:
/*
给定数组,int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}完成遍历操作,要求最终[1,2,3,4,5,6,7,8,9]
*/
class Array2Demo{
public static void main(String[] args){
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
printArray(arr);
}
//遍历输出
public static void printArray(int[][] arr){
System.out.print("[");
for(int i = 0; i< arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
if(i == arr.length - 1 && j == arr[i].length - 1 ){
System.out.println(arr[i][j]+"]");
}else{
System.out.print(arr[i][j]+",");
}
}
}
}
}
B:
/*
公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
*/
class Array2Demo2{
public static void main(String[] args){
int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
int sum = getSum(arr);
System.out.println("公司的年销售额为"+sum+"万元");
}
//求和
public static int getSum(int[][] arr){
int sum = 0;
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
sum += arr[i][j];
}
}
return sum;
}
}
C:
/*
打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
*/
import java.util.Scanner;
class Array2Demo3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入行数:");
int m = sc.nextInt();
int [][] arr = new int[m][m];
arraySetValue(arr);
printArray(arr);
}
//给数组赋值
//每列的第一个值和最后一个值赋值为1
//从第三行开始,中间的每一个数据都是上一行的前一列加上一行的本列之和
public static void arraySetValue(int[][] arr){
for(int i = 0; i < arr.length; i++){
arr[i][0] = 1;
arr[i][i] = 1;
if(i >= 2){
for(int j = 1; j < arr[i].length - 1; j++){
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
}
}
//按照格式打印杨辉三角形
public static void printArray(int[][] arr){
for(int i = 0; i < arr.length; i++){
for(int j = 0; j <= i; j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
二、 数组高级(排序和查找))
1.排序
冒泡排序:相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
选择排序:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
2.查找
基本查找:数组元素无序
二分查找:数组元素有序
练习题:
A int[] arr = {78,33,45,12,5,43,51,10};(用冒泡排序)
B 键盘录入5个数的一维数组,然后查询指定元素在数组中第一次的索引值
举例:{10,20,3,45,89} ; 45元素在书中第一次出现的索引值是3
C 请将"我" “爱” "你"存入数组,然后正着和反着输出,(提示:定义字符串数组)
D 键盘录入6个数据,获取数组中的最大值
--------------------------------------我是一条华丽的分割线--------------------------------
答案篇:
A:
/*
冒泡排序
*/
class BubbleSort{
public static void main(String[] args){
int[] arr = {78,33,45,12,5,43,51,10};
sortArray(arr);
printArray(arr);
}
//对数组进行冒泡排序
public static void sortArray(int[] arr){
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i ; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//打印数组
public static void printArray(int[] arr){
System.out.print("[");
for(int i = 0; i < arr.length; i++){
if(i == arr.length - 1){
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}
}
B:
/*
键盘录入5个数的一维数组,然后查询指定元素在数组中第一次的索引值
举例:{10,20,3,45,89} ; 45元素在书中第一次出现的索引值是3
*/
import java.util.Scanner;
class ArrayDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数:");
int num = sc.nextInt();
int[] arr = {10,20,3,45,89};
int index = searchIndex(arr,num);
System.out.println("该数在数组中第一次出现的索引值为:"+index);
}
public static int searchIndex(int[] arr,int num){
for(int i = 0;i<arr.length;i++){
if (arr[i] == num){
return i;
}
}
return -1;
}
}
C:
/*
请将"我" "爱" "你"存入数组,然后正着和反着输出,(提示:定义字符串数组)
*/
class ArrayDemo3{
public static void main(String[] args){
String[] arr = {"我","爱","你"};
System.out.println("正着输出的结果为:");
printArray(arr);
System.out.println("------------------");
System.out.println("反着输出的结果为:");
reverse(arr);
printArray(arr);
}
//将数组逆序
public static void reverse(String[] arr){
for(int i = 0;i < arr.length/2;i++){
String temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
}
//输出
public static void printArray(String[] arr){
System.out.print("[");
for(int i = 0;i < arr.length;i++){
if(i == arr.length - 1){
System.out.println("\""+arr[i]+"\"]");
}else{
System.out.print("\""+arr[i]+"\",");
}
}
}
}
D:
/*
键盘录入6个数据,获取数组中的最大值。
*/
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int[] arr = new int[6];
Scanner sc = new Scanner(System.in);
System.out.println("请依次输入六个数:");
for(int i = 0;i<arr.length;i++){
arr[i] = sc.nextInt();
}
int max = getMax(arr);
System.out.println("数组中的最大值为:"+max);
}
//获取最大值
public static int getMax(int[] arr){
int max = arr[0];
for(int i = 1;i<arr.length;i++){
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
}