静态初始化 int[] arr = new int[]{11,22,33};
动态初始化 int[] arr = new int[5]; //申请5个内存地址。
数组是引用类型,地址存放在栈中,数组元素是放在堆中。
内存中的存放情况:
地址a[1]表示现在指针指在a第二个地址指向数组第二个值。
插话:A ascii码 = 65,a = A+32 =97
初级题:
1.定义一个长度为10的int数组,统计数组中的最大值、最小值、以及奇数和偶数的个数,选择排序,反转数组;
package com.judy.demo;
public class ATest {
public static void main(String[] args) {
int[] arr = {5, 7, 1, 8, 6, 23, 9, 11, 56, 44};//数组初始化静态写法(简写的)
asc(arr);
System.out.println();
reverse(arr);
System.out.println();
max(arr);
min(arr);
count(arr);
}
public static void reverse(int[] arr) {
for (int i = 9; i >= 0; i--) {
System.out.print(arr[i] + " ");
}
}
public static void count(int[] arr) {
int oushu = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
oushu++;
}
}
int jishu = arr.length - oushu;
System.out.println("偶数=" + oushu + ",奇数=" + jishu);
}
public static void max(int[] arr) {
int max_num = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max_num) {
max_num = arr[i];
}
}
System.out.println("最大数=" + max_num);
}
public static void min(int[] arr) {
int min_num = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min_num) {
min_num = arr[i];
}
}
System.out.println("最小数=" + min_num);
}
public static void asc(int[] arr) { //升序
for (int i = 0; i < arr.length; i++) {
int min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
int temp;
temp = min;
min = arr[j];
arr[j] = temp;
}
}
arr[i] = min;
}
for (int a : arr)
System.out.print(a + " ");
}
}
2.给定一个整型数组,数组成员10个,求该数组中第二大的数
函数返回值是数组时,用法如下:主要是用法,题目不重要,现在arr2和arr指向同一块地址空间,所以arr的值也变了
package com.judy.demo;
public class ATest {
public static void main(String[] args) {
int[] arr = {5, 7, 1, 8, 6, 23, 9, 11, 56, 44};
int[] arr2 = asc(arr);
for (int a : arr2) {
System.out.print(a + " ");
}
System.out.println();
for (int a : arr) {
System.out.print(+a + " ");
}
System.out.println("\n arr数组中第二大的数是" + arr2[arr2.length - 2]);
}
public static int[] asc(int[] arr) { //升序
for (int i = 0; i < arr.length; i++) {
int min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
int temp;
temp = min;
min = arr[j];
arr[j] = temp;
}
}
arr[i] = min;
}
return arr;
}
}
所以main可以直接写成:
public static void main(String[] args) {
int[] arr = {5, 7, 1, 8, 6, 23, 46, 11, 56, 44};
asc(arr);
System.out.println();
for (int a : arr) {
System.out.print(+a + " ");
}
System.out.println("\n arr数组中第二大的数是" + arr[arr.length - 2]);
}
至于函数返回值是数组,但是可以直接调用而不设接收变量的原因我也不知道,我刚开始想着既然已经把原来数组的值改变了返回来,那这样直接输出,应该是成立的,所以就试了一下,果然可以,原因待解。