import java.util.Arrays;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: bai
* Date: 2022-09-02
* Time: 10:40
*/
public class Test {
public static void main1(String[] args) {
// 数组:
int[] arr = {1, 2, 3, 4}; //Java中数组的使用其实是将类型放在前面,数组名放在后面的
int[] arr3 = new int[]{1, 2, 3, 4, 5}; //不同的初始化数组的方式
int[] arr4 = new int[10]; //动态初始化:只是创建了10个元素的空间,内部其实早已经初始化了,内部的元素都为0
float[] arr2 = {1.0f, 2.0f}; //不同的类型内部存储的数据就不同
boolean[] axx = new boolean[10]; //初始化为false
int lex = axx.length;
for (int i = 0; i < lex; i++) {
System.out.println(axx[i]);
}
int len = arr.length;
for (int i = 0; i < len; i++) { //此时不知道数组的长度,我们在上面已经求出了长度,但是数组访问权限往往是[0,len-1]
System.out.println(arr[i]);
}
// 我们也可以将数组内部的数据放在相应的变量中
int ret = arr[2]; //此时2是索引,也被称为下标,使用下标去访问,2访问的是第三个元素
System.out.println(ret);
}
// 数组的打印方式:
public static void main2(String[] args) {
int[] arr = {1, 2, 3, 4};
int len = arr.length;
// 第一种打印方式:for循环
for (int i = 0; i < len; i++) {
System.out.println(arr[i]);
}
// 第二种打印方式:foreach
//使用foreach 第一个变量x就是这个数组内部存储的数据 第二个变量arr就是数组的名字
//foreach(数组存储的数据类型变量名 : 数组名)
for (int x :
arr) {
System.out.println(x + " ");
}
//第三种方式:使用类中的属性来直接打印(直接使用Arrays这个类来直接使用)
String ret = Arrays.toString(arr); //将数组变成字符串直接打印,因为是String类型,所以说我们应该使用一个String类型的元素来接收
System.out.println(ret);
}
//引用类型:
public static void main3(String[] args) {
int[] array1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println(Arrays.toString(array1));
int[] array2 = array1;
array2[1] = 1000000;
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
//为什么此刻array1和array2都发生了改变:因为产生了引用类型就会把这两个数组的地址锁定为同一个地址,也就是array2直接指向array1,类似于C语言的指针,使用array1指针直接指向array2,同一块地址,一个改变全部改变
int[] array3 = null; //代表array3不指向了任何对象
System.out.println(Arrays.toString(array3)); //null
// System.out.println(array3[2]); //直接访问了空引用,也就是出发了空指针
}
//改引用来查看数组的内容
public static void fun1(int[] arr) {
arr = new int[10]; //在此时的new int[] 产生了一个新的地址,将形参的地址传递给了实参,此时局部区域的实参也改变了地址
// 而改变了内部存储的数字,可是出了局部区域就会重新改变为原来的地址,形参就会销毁,实参依旧不变
}
public static void fun2(int[] arr) {
arr[0] = 99; //此刻的数组的地址直接将第1个元素的数值改为了99,因为此刻的数组的地址并没有发生改变
}
public static void main4(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
fun1(arr);
fun2(arr);
System.out.println(Arrays.toString(arr));
}
//Java也同时支持传递数组的
public static int[] Tran() {
int[] tmp = {1, 2, 3, 4, 5, 6, 7, 8, 9};
return tmp;
}
public static void main5(String[] args) {
int[] arr = Tran(); //此时可以直接传递数组
System.out.println(Arrays.toString(arr));
}
///数组转字符串
public static void main6(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println(Arrays.toString(arr)); //直接使用数组的内部属性toString
}
//自己模拟实现一个toString(MytoString)
public static void MytoString(int[] arr) {
if (arr == null) {
System.out.println("null");
}
int len = arr.length;
System.out.print('[');
for (int i = 0; i < len; i++) {
if (i != len - 1) {
System.out.print(arr[i] + ",");
} else if (i == len - 1) {
System.out.print(arr[i]);
}
}
System.out.println(']');
}
public static void main7(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
int[] arr2 = null;
MytoString(arr);
// MytoString(arr2);
}
//数组拷贝
public static void main8(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = arr1.length;
System.out.println(Arrays.toString(arr1));
int[] arr2 = new int[len];
for (int i = 0; i < len; i++) {
arr2[i] = arr1[i];
}
System.out.println(Arrays.toString(arr2));
//第二种方法拷贝,使用类属性
int[] arr3 = {11, 12, 13, 14, 15};
int[] arr4 = Arrays.copyOf(arr3, arr3.length); //直接使用copyof来直接拷贝进行
int[] arr5 = Arrays.copyOf(arr3, arr3.length * 2);
System.out.println(Arrays.toString(arr3));
System.out.println(Arrays.toString(arr4));
System.out.println(Arrays.toString(arr5)); //直接进行扩容拷贝,剩余的全部初始化为0
int[] arr6 = Arrays.copyOfRange(arr1, 2, 6); //这个拷贝的范围是[2,6)
int[] arr7 = arr1.clone(); //直接全部clone(产生副本) //
System.out.println("arr6 : " + Arrays.toString(arr6));
System.out.println("arr7 : " + Arrays.toString(arr7));
}
//打印数组中的所有数的平均值
public static double Arraysum(int[] arr) {
double sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
public static void main9(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double avg = 0;
int len = arr.length;
avg = Arraysum(arr) / len;
System.out.println("平均值是:" + avg);
}
//找出数组中的某个数的下标(初始查找(未优化版))
public static int Findnum(int[] arr, int k) {
for (int i = 0; i < arr.length; i++) {
if (k == arr[i]) {
return i;
}
}
return -1;
}
public static void main10(String[] args) {
int num = 0; //数组下标存储元素
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int k = 0; //数组中待寻找的元素
Scanner scan = new Scanner(System.in);
k = scan.nextInt();
int ret = Findnum(arr, k);
if (ret == -1) {
System.out.println("Find it error!");
} else {
System.out.println("下标是:" + ret);
}
}
//优化版:
public static int BinaryCheck(int[] arr, int k) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] > k) {
right = mid - 1;
} else if (arr[mid] < k) {
left = mid + 1;
} else {
return mid;
Java学习资料&项目源码 java基础se的课堂代码练习
需积分: 0 73 浏览量
2023-06-27
15:26:58
上传
评论
收藏 714KB ZIP 举报
哆啦哆啦S梦
- 粉丝: 139
- 资源: 517
最新资源
- 简单的Python示例,演示了如何使用TCP/IP协议进行基本的客户端和服务器通信
- 考试.sql
- keil2 + proteus + 8051.exe
- 1961ee27df03bd4595d28e24b00dde4e_744c805f7e4fb4d40fa3f695bfbab035_8(1).c
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
- windows注册表编辑工具
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
- 校园通行码预约管理系统20240522075502
- 车类型数据集6250张VOC+YOLO格式.zip
- The PyTorch implementation of STGCN.STGCN-main.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈