二维数组
- 定义:一维数组中的元素也是数组
- 声明方式
数据类型[][] 数组名 = new 数据类型[外层数组长度][内层数组长度];
数组类型[][] 数组名 = {{1,2,3},{4,5,6},{7,8,9},…}; - 遍历方式:需要使用双层for,才能获取到元素的具体值
/**
*
* @author Administrator
* 二维数组
* 可以理解为一维数组的元素还是一个数组
* 第一个长度为外层数组的长度,第二个长度为元素数组的长度
*/
public class ArrayDemo {
public static void main(String[] args) {
// 定义一个二维数组
int[][] arr = new int[2][3]; //动态创建
//System.out.println(arr.length); //二维数组层次的长度
int[][] arr1= {{1,2,3},{4,5,6}};//静态创建
System.out.println(arr1);
for (int[] is : arr1) {
System.out.println(is);
}
//foreach遍历二维数组
for (int[] is : arr1) {
for (int i : is) {
System.out.print(i+" ");
}
}
System.out.println();
//for遍历二维数组
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j]+" ");
}
}
}
}
- 堆栈图:
数组加强练习
import java.util.Arrays;
/**
* 1.设计一个方法,统计一个字符在字符数组中出现的次数(直接输出)
* 2.设计一个方法,统计一个字符在字符数组中出现的次数(直接输出)
* 3.已知这样的整型数组 int[] arr = {1,2,3,4,5,6,7,8,9,11,22}, 计算出其中的奇数和以及偶数和
* 4.现在有数组 double[] scores = {11,34,76,77,88,99,58,97,56};定义一个方法统计并打印出每一个阶段的学生人数(分段方式:0-60; 60-80;80-100)
* 5.设计一个方法,翻转传入数组中的元素
* 例如有这样的数组 char[] arr = {'源','代','码','教','育'};
* 调用完上面的方法之后,arr中的内容是这样的{'育','教','码','代','源'};
* 6.使用嵌套循环打印下面图形
* 1
* 1 2
* 1 2 3
* 1 2 3 4
* 1 2 3 4 5
* 1 2 3 4 5 6
* 1 2 3 4 5 6 7
* 1 2 3 4 5 6 7 8
* 1 2 3 4 5 6 7 8 9
* 7.移除数组int[] arr = {1,2,3,4,5,1,9,4,12,67,1};中1这个元素,返回一个新的数组 (不带有1);即新数组为int[] arr2 ={2,3,4,5,9,4,12,67};
*/
public class ArrayStrongerPractice {
public static void main(String[] args) {
// TODO Auto-generated method stub
//第一题
char[] c= {'a','a','s','c','w','f','e','a','g','e','t'};
System.out.println(statisticsChar(c, 'a'));
//第二题
int[] arr = {1,2,3,4,5,6,7,8,9,11,22};
getSum(arr);
//第三题
int[] scores = {11,34,76,77,88,99,58,97,56};
statisticsEachStepScore(scores);
//第四题
char[] arrC = {'源','代','码','教','育'};
flipArry(arrC);
System.out.println(Arrays.toString(arrC));
//第五题
printGraph(9);
//第六题
int[] arr1 = {1,2,3,4,5,1,9,4,12,67,1};
int[] newArr = remove_1_fromArray(arr1);
System.out.println(Arrays.toString(newArr));
test(arr1);
}
/**
* 1.设计一个方法,统计一个字符在字符数组中出现的次数(直接输出)
* @param char[] arrC
* @param char c
* @return int
*/
public static int statisticsChar(char[] arrC,char c) {
int count=0;
for (char d : arrC) {
if(c==d) {
count++;
}
}
return count;
}
/**
* 3.已知这样的整型数组 int[] arr = {1,2,3,4,5,6,7,8,9,11,22}, 计算出其中的奇数和以及偶数和
* @param arr
*/
public static void getSum(int[] arr) {
int oddSum=0; //接收奇数的和
int evenSum=0; //接收偶数的和
for (int i : arr) {
if(i%2==0) {
evenSum+=i;
}else {
oddSum+=i;
}
}
System.out.println("奇数和为:"+oddSum);
System.out.println("偶数和为:"+evenSum);
}
/**
* 4.现在有数组 double[] scores = {11,34,76,77,88,99,58,97,56};定义一个方法统计并打印出每一个阶段的学生人数(分段方式:0-60; 60-80;80-100)
* @param arr
*/
public static void statisticsEachStepScore(int[] arr) {
int scoreA=0;
int scoreB=0;
int scoreC=0;
//for 循环遍历数组
for (int i : arr) {
//使用switch选择判断,i/10得到一个整数,所以只要判断i/10即可选择分数段
switch (i/10) {
case 10:
case 9:
case 8: scoreA++;break;
case 7:
case 6: scoreB++;break;
default: scoreC++;break;
}
}
//打印各分数段的人数
System.out.println("0~60分的人数有:"+scoreC);
System.out.println("60~80分的人数有:"+scoreB);
System.out.println("80~100分的人数有:"+scoreA);
}
/**
* 5.设计一个方法,翻转传入数组中的元素
* 例如有这样的数组 char[] arr = {'源','代','码','教','育'};
* 调用完上面的方法之后,arr中的内容是这样的{'育','教','码','代','源'};
* @param arrC
*/
public static void flipArry(char[] arrC) {
char t;
for (int i = 0; i < arrC.length/2; i++) {
t=arrC[i];
arrC[i]=arrC[arrC.length-1-i];
arrC[arrC.length-1-i]=t;
}
}
/**
* 6.使用嵌套循环打印下面图形
* 1
* 1 2
* 1 2 3
* 1 2 3 4
* 1 2 3 4 5
* 1 2 3 4 5 6
* 1 2 3 4 5 6 7
* 1 2 3 4 5 6 7 8
* 1 2 3 4 5 6 7 8 9
*/
public static void printGraph(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j+" ");
}
System.out.println();
}
}
/**
* 7.移除数组int[] arr = {1,2,3,4,5,1,9,4,12,67,1};中1这个元素,
* 返回一个新的数组 (不带有1);即新数组为int[] arr2 ={2,3,4,5,9,4,12,67};
* @param arr
* @return
*/
public static int[] remove_1_fromArray(int[] arr) {
int count=0;
int n=0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=1) {
count++;
}
}
int[] newArr=new int[count];
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=1) {
newArr[n++]=arr[i];
}
}
return newArr;
}
}
方法
- 定义:可以完成某个独立功能的代码块,存在于类中,可以重复使用,每次互不影响。
- 方法的调用:
- 在同一个类中:方法名(有参传参);
- 不在同一个类中:
如果没有static修饰:类名.方法名(有参传参);
如果没有static修饰:创建对象 对象名.方法名(有参传参):
/**
* @author Administrator
* 方法:可以完成某种独立功能的代码块,存在于类结构中,可以重复使用,每次使用互不影响
* main方法介绍:
* public:修饰符 非必须
* static:修饰符,jvm优先加载 非必须
* void:空的(返回值类型) 必须
* main:方法名 必须
* ():用来存放参数的 必须
* String[] args:参数 非必须
* {}:结构体(程序块) 必须
*
* 自定义方法
* 方法的调用
* 1.同一个类中的方法调用,直接:方法名();
* 静态上下文不能引用非静态上下文
* 2.不同类中的方法调用
* 如果方法有static修饰,调用:类名.方法名;
* 没有static修饰,创建对象,调用:对象名.方法名
*/
public class MethodDemo {
public static void main(String[] args) {
MethodDemo m=new MethodDemo();
m.show();
System.out.println("哈哈哈哈哈哈哈!");
}
//自定义一个方法
void show() {
System.out.println("这是一个自定义方法!");
}
void heihei() {
System.out.println("嘿嘿嘿嘿");
}
}
方法的参数
/**
* @author Administrator
* 有参数:
* 调用方传递的参数叫实际参数
* 被调用方接受的参数叫形式参数
*/
public class MethodDemo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
getS(5, 6);
}
static void getS(int a,int b) {
System.out.println(a*b);
}
}
方法的返回
-
return 返回值
方法的返回值类型根据实际返回结果的类型来确定 在方法的最后一句中加上return返回结果: return后面不能重有功能语句, 如果方法中有判断出现,此时需要考虑判断以外的也需要返回值
/**
* @author Administrator
* 有参数:
* 调用方传递的参数叫实际参数
* 被调用方接受的参数叫形式参数
* 参数传递时如果实参名字和形参名字一致的时候
* 要看实参是局部变量还是成员变量
* 如果是成员变量这个时候在调用的方法中修改参数此时修改的是调用方法的参数不是修改的成员变量是修改局部变量
* 如果是局部变量那么修改就不会有任何影响
* 方法的返回值:
* 方法的返回值类型根据实际返回结果的类型来确定
* 在方法的最后一句中加上return返回结果:
* return后面不能重有功能语句,
* 如果方法中有判断出现,此时需要考虑判断以外的也需要返回值
*/
public class MethodDemo4 {
static int x=11;
static int y=22;
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* int x=1; int y=2;
*/
getS(x, y);
System.out.println(x);
System.out.println(y);
System.out.println(getSum(12, 22));
}
static void getS(int a,int b) {
a=12;
b=32;
x=22;
y=43;
}
static int getSum(int a,int b) {
return a+b;
}
//设计一个方法 判断一个数是否是偶数 返回值为"是"或者"否"
static String checkEven(int a) {
if(a%2==0) {
return "是";
}
return "否";
}
}
练习题
public class Practice {
public static void main(String[] args) {
// TODO Auto-generated method stub
int max = getMax(14, 20);
System.out.println(max);
int min = getMin(20, 15, 14);
System.out.println(min);
int[] arr= {4,2,5,6,8,9};
int product = getProduct(arr);
System.out.println(product);
}
//1.定义一个方法getMax,接收两个int参数,返回较大的一个数。
public static int getMax(int a,int b) {
// TODO Auto-generated method stub
return a>b?a:b;
}
//2.定义一个方法,接受三个int参数,返回最小的一个数。
public static int getMin(int a,int b,int c) {
int min = a>b?b:a;
return min>c?c:min;
}
//3.设计一个方法求多个整数积的方法
//(提示:定义一个方法,方法的参数是 int 数组,参考求多个整数和的示例)
public static int getProduct(int[] arr) {
int p=1;
for (int i = 0; i < arr.length; i++) {
p*=arr[i];
}
return p;
}
}
/**
*
* @author Administrator
* 1.定义一个方法getMax,接收两个int参数,返回最大的一个数(低级)
* 建议使用三目运算
*/
public class Work1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int max = getMax(29, 20);
System.out.println(max);
}
/**
* 获取两个数中的最大值
* @param a
* @param b
* @return int
*/
public static int getMax(int a,int b) {
return a>b?a:b;
}
}
/**
*
* @author Administrator
* 定义一个方法,接收三个int参数,返回最小的一个数(低级)
*/
public class Work2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int max=getMaxFromThree(20, 20, 50);
System.out.println(max);
}
/**
* 获取三个数中的最小值
* @param a
* @param b
* @param c
* @return
*/
public static int getMaxFromThree(int a,int b,int c) {
a=a<b?a:b; //先求出a和b的最小值放到a中
return a<c?a:c;//再求a和c的最大值并返回
}
}
/**
*
* @author Administrator
* 3.设计一个求3个int类型积的方法,并返回这个积(低级)
*/
public class Work3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int s=getProduct(20, 30, 40);
System.out.println(s);
}
/**
* 求三个数的乘积
* @param a
* @param b
* @param c
* @return
*/
public static int getProduct(int a,int b,int c) {
return a*b*c;
}
}
/**
*
* @author Administrator
* 4.设计一个方法,传入一个int的数组,返回该数组中最大的值(中级)
*/
public class Work4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]= {10,50,78,50,12,56,87,35,75,18,57,95,82,102};
int maxInArr = getMaxInArr(arr);
System.out.println(maxInArr);
}
/**
* 求数组中的最大值
* @param arr
* @return
*/
public static int getMaxInArr(int[] arr) {
int max=arr[0];
for (int i = 0; i < arr.length; i++) {
if(max<arr[i]) {
max=arr[i];
}
}
return max;
}
}
/**
* 5.设计一个方法,查询并返回一个字符在字符数组中第一次出现的位置(高级)
* char arr = {'a','b','c','a','g'};
* char c = 'a';
*
* 四要素:
* 返回值类型:int
* 方法名:getIndexInArray()
* 形参列表:char c,char[] arr
* 方法体:
* 遍历整个数组,将c 和 arr[i] 如果相等,返回下标i
* 如果遍历完,没有找到,返回 -1 下标范围:0,n
*/
public class Work5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
char arr[] = {'a','b','c','a','g'};
char c='f';
System.out.println(getIndexInArray(c, arr));
}
/**
* 获取一个字符在一个字符数组中的第一次出现的位置
* @param c
* @param arr
* @return int
*/
public static int getIndexInArray(char c,char[] arr) {
for (int i = 0; i < arr.length; i++) {
if(arr[i]==c) {
return i;
}
}
return -1;
}
}
/**
*
* @author Administrator
* 6.设计一个方法,统计返回一个字符在字符数组中出现的次数(高级)
*/
public class Work6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
char arr[] = {'a','b','c','a','g'};
char c='a';
System.out.println(getCountInArray(c, arr));
}
/**
* 统计返回一个字符在字符数组中出现的次
* @param c
* @param arr
* @return
*/
public static int getCountInArray(char c,char[] arr) {
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]==c) {
count++;
}
}
return count;
}
}
/**
*
* @author Administrator
* 7.设计一个方法,已知这样的整形数组 int[] arr = {1,2,3,4,5,6,7,8,9,11,12}返回其中的奇数和
*/
public class Work7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public static int getArraySum(int[] arr) {
int sum=0;
for (int i = 0; i < arr.length; i++) {
if (arr[i]%2!=0) {
sum+=arr[i];
}
}
return sum;
}
}
/**
*
* @author Administrator
* 8.现在有数组 double[] scores = {11,34,76,77,88,99,58,97,56};定义一个方法统计并打印出每一个阶段学生人
* 数(分段方式:0-60;60-80;80-100)(高级)
*/
public class Work8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double[] scores = {11,34,76,77,88,99,58,97,56};
statisticalScore(scores);
}
/**
* 分数阶段统计
* (分段方式:0-60;60-80;80-100)
* @param arr
*/
public static void statisticalScore(double[] arr) {
int scoreCountA=0;
int scoreCountB=0;
int scoreCountC=0;
for (double i : arr) {
if(i<60) {
scoreCountC++;
}else if(i<80){
scoreCountB++;
}else {
scoreCountA++;
}
}
System.out.println("0-60分的人数有:"+scoreCountC);
System.out.println("60-80分的人数有:"+scoreCountB);
System.out.println("80-100分的人数有:"+scoreCountA);
}
}
/**
*
* @author Administrator
* 9.设计一个方法,传入一个int数组,翻转该数组中的元素,并且返回反转后的数组(牛皮做)
*/
public class Work9 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {1,2,3,4,5,6};
arr=flipArray(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+",");
}
}
/**
* 翻转数组
* @param arr
* @return
*/
public static int[] flipArray (int[] arr) {
int t;
for (int i = 0; i < arr.length/2; i++) {
t=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=t;
}
return arr;
}
}