您的位置:首页 > 编程语言 > Java开发

java之二维数组

2016-09-24 09:14 363 查看
1.二维数组概述

每个班级有很多个学生,所以,可以用数组来存储,而每个年级同时又很多班级,这个也应该可以用数组来存储,那么如何来表示这样的数据呢?java就提供了二维数组供我们使用。
由此可见,二维数组其实就是一个元素为一维数组的数组。

2.二维数组之定义格式一
数据类型[][] 变量名 = new 数据类型[m]
;
m表示这个二维数组有多少个一维数组,n表示每一个一维数组的元素个数。
例如:
int[][] arr = new int[3][2];
定义了一个二维数组arr,这个二维数组有3个一维数组,名称是arr[0],ar[1],arr[2],每一个一维数组有2个元素,可以通过arr[m]
来获取。
/**
*
*/
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

;

//給二维数组的任何一行的第一列和最后一列赋值为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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java之二维数组