1.二维数组概述
每个班级有很多个学生,所以,可以用数组来存储,而每个年级同时又很多班级,这个也应该可以用数组来存储,那么如何来表示这样的数据呢?java就提供了二维数组供我们使用。
由此可见,二维数组其实就是一个元素为一维数组的数组。
2.二维数组之定义格式一
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组,n表示每一个一维数组的元素个数。
例如:
int[][] arr = new int[3][2];
定义了一个二维数组arr,这个二维数组有3个一维数组,名称是arr[0],ar[1],arr[2],每一个一维数组有2个元素,可以通过arr[m][n]来获取。
/**
*
*/
public class Array2Demo {
public static void main(String[] args){
//定义了一个二维数组
int[][] arr = new int[3][2];
//这个二维数组有3个一维数组元素
//每个一维数组有2个元素
//输出二维数组的名称
System.out.println(arr);
//输出二维数组的第一个元素,一维数组的名称
System.out.println(arr[0]);
//输出二维数组的第二个元素,一维数组的名称
System.out.println(arr[1]);
//输出二维数组的第三个元素,一维数组的名称
System.out.println(arr[2]);
//输出二维数组的第一个元素
System.out.println(arr[0][0]);
//输出二维数组的第二个元素
System.out.println(arr[0][1]);
}
}
[[I@1b6d3586
[I@4554617c
[I@74a14482
[I@1540e19d
3.二维数组之定义格式二
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组。
没有直接给出一维数组的个数,可以动态的给出。
例如:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
4.二维数组之定义格式三
数据类型[][] 变量名 = new 数据类型[][]{{元素...},{元素...},{元素...}}
或者数据类型[][] 变量名 = {{元素...},元素...},{元素...}};
例如:
int[][] arr = new int[][]{{1,2,3},{4,5},{6}};
5.练习
/**
* 二维数组的遍历
*/
public class Array2Demo {
public static void main(String[] args){
//定义一个二维数组
int[][] arr = new int[][] {{1,2,3},{4,5,6},{7,8,9}};
//arr[0]代表了{1,2,3}
for (int x = 0;x<arr[0].length;x++){
System.out.println(arr[0][x]);
}
//arr[1]代表了{4,5,6}
for (int x =0;x<arr[1].length;x++){
System.out.println(arr[1][x]);
}
//arr[2]代表了{7,8,9}
for (int x = 0;x<arr[2].length;x++){
System.out.println(arr[2][x]);
}
//通过for循环的嵌套来输出二维数组的元素
for (int x = 0;x<arr.length;x++){//遍历二维数组中的一维数组
for (int y=0;y<arr[x].length;y++){//遍历二维数组中的一维数组的元素
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
}
}
/**
* 某公司销售额求和
* 某公司按照季度和月份统计的数据如下,单位:万元
* 第一季度:22 66 44
* 第二季度:77 33 88
* 第三季度:25 45 65
* 第四季度:11 66 99
*
*/
public class Array2Demo {
public static void main(String[] args){
int[][] arr = new int[][]{{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
int sum = 0;
for (int x = 0;x<arr.length;x++){
for (int y = 0;y<arr[x].length;y++){
sum += arr[x][y];
}
}
System.out.println("销售额总和为:"+sum);
}
}
import java.util.Scanner;
/**
* 打印杨辉三角形
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1 5 10 5 1
*
* 分析:
* 1.任何一行的第一列和最后一列都是1
* 2.从第三行开始,每一个数据是它上一行的前一列和它的上一行的本列之和
* 步骤:
* 1.定义一个二维数组,行数如果是n,我们把列数也定义为n
* 2.給二维数组的任何一行的第一列和最后一列赋值为1
* 3.按照规律,給其他元素赋值
* 从第三行开始,每一个数据是它的上一行的前一列和它的上一行的本列之和
* 4.遍历这个二维数组
*/
public class Array2Demo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner input = new Scanner(System.in);
//n这个数据是来自于键盘录入
System.out.println("请输入一个数据:");
int n = input.nextInt();
//定义一个二维数组
int[][] arr = new int[n][n];
//給二维数组的任何一行的第一列和最后一列赋值为1
for (int x = 0; x < arr.length; x++) {
arr[x][0] = 1;//任何一行第一列
arr[x][x] = 1;//任何一行最后一列
}
//从第三行开始,每一个数据是它的上一行的前一列和它的上一行的本列之和
for (int x = 2;x<arr.length;x++){
for (int y = 1;y<=x-1;y++){
arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
}
}
//打印
printYangHuiSanJiao(arr);
}
/**
* 输出二维数组的每个元素
* @param arr
*/
public static void printYangHuiSanJiao(int[][] arr){
for (int x = 0;x<arr.length;x++){
for (int y = 0;y<=x;y++){
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
}
}
6.思考题
/**
* java中参数传递
*/
public class ArgsDemo {
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
change(a,b);
int[] arr= {1,2,3,4,5};
change(arr);
printArray(arr);
}
public static void change(int a, int b) {
System.out.println("a:"+a+",b="+b);
a = b;
b = a + b;
System.out.println("a:"+a+",b="+b);
}
public static void change(int[] arr){
for (int x =0;x<arr.length;x++){
if(arr[x]%2 == 0){
arr[x] *= 2;
}
}
}
public static void printArray(int[] arr){
for (int x = 0;x<arr.length;x++){
System.out.print(arr[x]+"\t");
}
System.out.println();
}
}
a:10,b:20
a:10,b=20
a:20,b=40
1 4 3 8 5
/**
* 某公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全
* 在传递过程中需要加密,加密规则如下:
* 首先将数据倒序,然后将每位数组都加上5,再用和除以10的余数代替该数字,
* 最后将第一位和最后一位数字交换。
* 请任意给定一个小于8位的整数,然后,把加密后的结果输出到控制台上
*
* 题目要求:
* A.数据是小于8位的整数
* 定义一个int类型的数据
* int number = 1232456;
* B.加密规则
* a.首先将数据倒序
* 结果 654321
* b.然后将每位数字都加上1,再用和除以10的余数代替该数字
* 结果 109876
* c.最后将第一位和最后一位数字交换
* 结果 609871
* C.将加密后的结果输出到控制台
*
* 通过简单的分析,我们知道如果我们有办法把这个数据变成数据就好了。
*
* 那么,如何把数据转换成一个数组呢?
* A.定义一个数据
* int number = 123456;
* B.定义一个数组,这个时候问题就来了,数组的长度是多少呢?
* int[] arr = new int[8];//不可能超过8
* 在赋值的时候,我们需要定义一个变量来记录索引的变化。
* 定义一个索引值是0
* int index = 0;
* C.获取每一个数据
* int ge = number % 10;
* int shi = number / 10 % 10;
* int bai = number /10/10%10;
*
* arr[index]=ge;
* index++;
* arr[index]=shi;
* index++;
* arr[index]=bai;
* ...
*
*/
public class ArgsDemo {
public static void main(String[] args){
//定义一个数据
int number = 123456;
//定义一个数组
int[] arr = new int[8];
//把数据中每一位上的数据获取到后,存储到数组中
int index = 0;
while(number > 0){
arr[index++]= number %10;
number /= 10;
}
//然后将每位数字都加上5,再用和除以10的余数代替该数组
for (int x = 0;x<arr.length;x++){
arr[x] += 5;
arr[x] %= 10;
}
//最后将第一位和最后一位交换
int temp = arr[0];
arr[0] = arr[index-1];
arr[index-1] = temp;
//输出数组中的数据
printArray(arr,index);
}
public static void printArray(int[] arr,int index){
for (int x=0;x<index;x++){
System.out.print(arr[x]+"\t");
}
System.out.println();
}
}
代码改进
import java.util.Scanner;
/**
* 某公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全
* 在传递过程中需要加密,加密规则如下:
* 首先将数据倒序,然后将每位数组都加上5,再用和除以10的余数代替该数字,
* 最后将第一位和最后一位数字交换。
* 请任意给定一个小于8位的整数,然后,把加密后的结果输出到控制台上
*
* 题目要求:
* A.数据是小于8位的整数
* 定义一个int类型的数据
* int number = 1232456;
* B.加密规则
* a.首先将数据倒序
* 结果 654321
* b.然后将每位数字都加上1,再用和除以10的余数代替该数字
* 结果 109876
* c.最后将第一位和最后一位数字交换
* 结果 609871
* C.将加密后的结果输出到控制台
*
* 通过简单的分析,我们知道如果我们有办法把这个数据变成数据就好了。
*
* 那么,如何把数据转换成一个数组呢?
* A.定义一个数据
* int number = 123456;
* B.定义一个数组,这个时候问题就来了,数组的长度是多少呢?
* int[] arr = new int[8];//不可能超过8
* 在赋值的时候,我们需要定义一个变量来记录索引的变化。
* 定义一个索引值是0
* int index = 0;
* C.获取每一个数据
* int ge = number % 10;
* int shi = number / 10 % 10;
* int bai = number /10/10%10;
*
* arr[index]=ge;
* index++;
* arr[index]=shi;
* index++;
* arr[index]=bai;
* ...
*
*/
public class ArgsDemo {
public static void main(String[] args){
//创建键盘录入对象
Scanner input = new Scanner(System.in);
System.out.println("请输入一个小于8位的数字:");
//定义一个数据
int number = input.nextInt();
//调用加密算法
String result = jiaMi(number);
System.out.println("加密后的结果是:"+result);
}
public static String jiaMi(int number){
//定义数组
int[] arr = new int[8];
//定义索引
int index = 0;
//把number中的数据想办法放到数组中
while(number >0){
arr[index++] = number %10;
number /= 10;
}
//把每个数据加5,然后对10取余
for (int x =0;x<arr.length;x++){
arr[x] += 5;
arr[x] %= 10;
}
//把第一个数据和最后一个数据交换
int temp = arr[0];
arr[0] = arr[index-1];
arr[index-1] = temp;
//把数组的元素拼接成一个字符串返回
String str = "";
for (int x = 0;x<index;x++){
str += arr[x];
}
return str;
}
}
转载于:https://blog.51cto.com/11841428/1856003