//遍历二维数组
for(int i = 0;i < arr.length;i++){
for(int j = 0; j < arr[i].length;j++){
sout(arr[i][j]);
}
sout();
}
数组练习2
public class ArrayExer1 {
public static void main(String[] args) {
int arr[][] = new int[][]{{3,5,8},{12,9},{7,0,6,4}};
int sum = 0;//记录总和
for (int i = 0;i < arr.length;i++){
for(int j = 0;j < arr[i].length;j++) {
sum += arr[i][j];
}
}
System.out.println("所有元素的总和为:" + sum);
}
}
练习3
package array;
/**
* @Author: jt
* @Date: 2022/3/28 21:59
* @Version 1.0
*/
public class YangHuiTest {
public static void main(String[] args) {
//1.声明并初始化二维数组
int[][] yangHui = new int[10][];
//2.给数组的元素赋值
for (int i =0;i<yangHui.length;i++){
yangHui[i] = new int[i + 1];
//2.1给首末元素赋值
yangHui[i][0] = 1;
yangHui[i][i] = 1;
//2.2给每行的非首末元素赋值
//if (i > 1){
for (int j = 1; j < yangHui[i].length - 1;j++){
yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
// }
}
}
//3.遍历二维数组
for (int i = 0; i <yangHui.length;i++){
for (int j = 0;j < yangHui[i].length;j++){
System.out.println(yangHui[i][j] + " ");
}
System.out.println();
}
}
}
1.数组中涉及的常见算法
- 数组元素的赋值(杨辉三角、回形数)
- 求数值型数组中元素的最大值、最小值、平均数、总和等
- 数组的复制、反转、查找(线性查找、二分法查找)
- 数组元素的排序算法
练习5
package array;
/**
* @Author: jt
* @Date: 2022/3/28 22:47
* @Version 1.0
*/
public class ArrayExer2 {
public static void main(String[] args) {
int[] arr = new int[10];
for(int i = 0;i < arr.length;i++){
arr[i] = (int)(Math.random() * (99 - 10 + 1) + 10);
}
//遍历
for (int i = 0; i < arr.length;i++){
System.out.println(arr[i] + "\t");
}
//求数组元素的最大值
int maxValue = arr[0];
for (int i = 0; i < arr.length;i++){
if (maxValue < arr[i]){
maxValue = arr[i];
}
}
System.out.println("最大值为:" + maxValue);
//求数组元素的最小值
int minValue = arr[0];
for (int i = 0; i < arr.length;i++){
if (minValue > arr[i]){
minValue = arr[i];
}
}
System.out.println("最小值为:" + minValue);
//求数组元素的总和
int sum = 0;
for (int i = 0; i< arr.length;i++){
sum += arr[i];
}
System.out.println("总和为:" + sum);
//求数组元素的平均数
int avgValue = sum / arr.length;
System.out.println("平均数为:" + avgValue);
}
}
练习6
package array;
/**
* @Author: jt
* @Date: 2022/3/28 23:17
* @Version 1.0
*/
/*
使用简单数组
(1)创建一个名为ArrayExer3的类,在main()方法中声明array1和array2两个变量,
他们是int[]类型的数组。
(2)使用大括号f,把array1初始化为8个素数:2,3,5,7,11,13,17,19。
(3)显示array1的内容。
(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。
打印出array1.
思考:array1和array提什么关系?
答:他俩地址值相同,都指向了堆内存中的唯一的一个数组实体
拓展:修改题目,实现array2对array1数组的复制
*/
public class ArrayExer3 {
public static void main(String[] args) {
//test1();
test2();
}
public static void test1(){
int[] array1,array2;
array1 = new int[]{2,3,5,7,11,13,17,19};
//显示array1的内容
for (int i = 0;i < array1.length;i++){
System.out.println(array1[i]);
}
//赋值array2变量等于array1,这不能称作数组的复制
array2 = array1;//把array1的地址给了array2,堆内存中只有一个数组
//修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)
for (int i = 0;i < array2.length;i++){
if (i % 2 == 0){
array2[i] = i;
}
}
System.out.println();
System.out.println(array1);
//array1变了
}
public static void test2(){
//实现array2对array1数组的复制
int[] array1,array2;
array1 = new int[]{2,3,5,7,11,13,17,19};
//显示array1的内容
for (int i = 0;i < array1.length;i++){
System.out.println(array1[i]);
}
//数组复制
array2 = new int[array1.length];
for (int i = 0; i < array2.length;i++){
array2[i] = array1[i];
}
for (int i = 0;i < array2.length;i++){
if (i % 2 == 0){
array2[i] = i;
}
}
//打印出array1
System.out.println();
for (int i = 0;i < array1.length;i++){
System.out.println(array1[i] + "\t");
}
}
}
数组的反转
package array;
/**
* @Author: jt
* @Date: 2022/3/28 23:40
* @Version 1.0
*/
/*
算法考察:数组的复制,反转,查找(线型查找,二分查找)
*/
public class ArrayExer4 {
public static void main(String[] args) {
String[] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};
//数组的复制(区别于数组变量的赋值)
String[] arr1 = new String[arr.length];
for (int i = 0;i < arr1.length;i++){
arr1[i] = arr[i];
}
//数组的反转
//方法一
// for (int i = 0;i < arr.length / 2;i++){
// String temp = arr[i];
// arr[i] = arr[arr.length - i - 1];
// arr[arr.length - i - 1] = temp;
// }
//方法二
for (int i = 0,j = arr.length - 1;i < j;i++,j--){
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//遍历
for (int i = 0;i < arr1.length;i++){
System.out.println(arr[i] + "\t");
}
}
}
数组的查找
1.线性查找
//查找:线性查找
String dest = "BB";
boolean isFlag = true;
for (int i = 0;i < arr.length;i++){
if (dest.equals(arr[i])){
System.out.println("找到了指定元素,位置为:" + i);
isFlag = false;
break;
}
}
if (isFlag){
System.out.println("很遗憾,没有找到");
}
2.二分查找
//二分法查找:
//前提:所查找的数组必须有序
int[] arr2 = new int[]{-98,-34,-6,2,35,45,49,66,79,89,120,210};
int dest1 = -45;
int head = 0;//初始的首索引
int end = arr2.length - 1;//初始的末索引
boolean isFlag1 = true;
while(head <= end){
int middle = (head + end) / 2;
if (dest1 == arr2[middle]){
System.out.println("找到了指定元素,位置为:" + middle);
isFlag1 = false;
break;
}else if (arr2[middle] > dest1){
end = middle - 1;
}else{//arr2[middle] < dest1
head = middle + 1;
}
}
if (isFlag1){
System.out.println("很遗憾,没找到");
}
更多推荐
Java中数组的遍历
发布评论