今天把昨天的数组剩余部分讲完,因为数组已经快接近尾声,可能理论不是很多,这一次会更加着重写题目~
先来认识一下Java中一个专门针对数组进行操作的包装方法:Arrays

可以私下了解一下,这里举例一个数组以字符串形式输出的方法:
如果想要这个的话可以评论区走一波私发一起进步~
java
public static void main1(String[] args) {
//数组定义
int[] arr={1,2,3,4,5,6};
int[] arr2=new int[]{7,8,9,10};//数组对象
//不初始化都是0值,出了布尔类型,布尔类型是false
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println("");
//增强for循环,for each循环
for (int x:arr2) {//右边是数组名,左边是当前这个数字
//遍历数组,取出其中的数据给到变量
System.out.print(x+" ");
}
System.out.println();
//操作数组的工具类
String ret = Arrays.toString(arr);
//使用Arrays的toString方法把传入的参数arr表示的数组以字符串的形式进行输出
System.out.print(ret+" ");
}
然后是Java个数组名指向了同一个元素的时候,无论使用哪一个数组名进行操作都可以对指向的那个数组进行修改!~
java
public static void main(String[] args) {
int[] arr = {1,2,3,4};
int[] arr2={4,5,6,7};
arr=arr2;//只要两个指向了同一个数组,那么无论哪一个数组都可以修改
arr[1]=7;
arr2[0]=5;
for(int i=0;i<arr2.length;i++){
System.out.print(arr2[i]+" ");
}
}

可以看到原本指向的是arr2,里面是4,5,6,7,经过修改之后1地址值变成7,0地址值变成5,都是运行成功没有问题的~
再来看一个小题目:将数组中的每一个元素都扩大两倍
java
public static void fun(int[] arr){
for (int i=0;i< arr.length;i++){
arr[i]=arr[i]*2;//直接*2即可!~
}
}
public static void main4(String[] args){
int[] arr={1,2,3,4,5};
System.out.println(Arrays.toString(arr));
fun(arr);
System.out.println(Arrays.toString(arr));
}
然后就是一个很好玩的代码~来看看吧
java
public static String dun(int[] arr){
String ret = "["; // 初始化字符串,以左方括号开始
// 遍历数组中的每个元素
for (int i = 0; i < arr.length; i++) {
ret += arr[i]; // 将当前数组元素添加到结果字符串中
// 如果不是最后一个元素,添加逗号和空格分隔符
if (i != arr.length - 1) {
ret += ", ";
}
}
ret += "]"; // 在字符串末尾添加右方括号
return ret; // 返回格式化后的字符串
}
public static void main(String[] args) {
int[] arr = {2, 4, 6, 8, 10};
System.out.println(dun(arr)); // 调用dun方法并打印结果
// 输出: [2, 4, 6, 8, 10]
}

这样可以模拟一个数组的样式~一维数组的差不多就是这个样子啦,来做点题目吧~
java
import java.util.Arrays;
public class pp_25 {
//是否存在连续三个奇数的数组 如果存在,请返回 true ;否则,返回 false 。
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,3,5};
boolean flg = false;
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
count++;
if (count == 3) { // 如果连续奇数达到3个
flg = true;
break; // 找到后提前结束循环
}
} else {
count = 0;
}
}
System.out.println(flg); // 输出:false
}
//数组中出现次数 大于 n/2 的元素
public static int fun(int[]arr){
Arrays.sort(arr);
return arr.length/2;//返回数组长度除以2的整数结果
//因为数组中某个数量最多,然后按照顺序来那肯定是某个数量占大多数
//中间的一定是最多的,比如10个球4个红的6个黑的,中间值5一定是黑的
}
public static void main8(String[] args) {
int[]arr={1,2,2,2,1};
System.out.println(fun(arr));
}
//只出现一次的元素
public static void main7(String[] args) {
int[]num={2,2,1};
int res=0;
for (int num1:num){
res ^= num1;
}
System.out.println(res);
}
//给定一个整数数组 num 和一个整数目标值 target,
// 请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
public static int[] twoSum(int[] num,int target){
for (int i=0;i< num.length;i++){
for (int j=i+1;j< num.length;j++){
if(num[i]+num[j]==target){//前一位和后一位相加比较
return new int[]{i,j};
}
}
}
return new int[0];//没有找到
}
public static void main6(String[] args) {
int[] num = {2,7,11,15};
int target=9;
int[] res=twoSum(num,target);
System.out.println(Arrays.toString(res));
}
//给定一个整型数组, 实现冒泡排序(升序排序)
public static void main5(String[] args) {
int[] arr={44,2,1,11,23,45,6};
boolean flg=false;
for (int i=0;i< arr.length-1;i++){
flg=false;
for (int j=0;j< arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
flg=true;//交换了
}
}
if(flg==false){
break;
}
}
System.out.println(Arrays.toString(arr));
}
//二分查找
public static int bs(int[] arr,int key){
int left=0;
int right = arr.length-1;
while (left<=right){
int mid=(left+right-1);
if(key<arr[mid]){
right=mid-1;
} else if (key>arr[mid]) {
left=mid+1;
}else {
return mid;
}
}
return -1;
}
public static void main4(String[] args) {
int[] arr = {1,2,3,4,5,6};
System.out.println(bs(arr,5));
}
//调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
public static void main3(String[] args) {
int[] arr={1,2,3,4,5,6};
System.out.println("转换前:"+Arrays.toString(arr));
int[] arr2=new int[arr.length];
int index=0;
for (int i=0;i< arr.length;i++){
if(arr[i]%2!=0){
arr2[index]=arr[i];
index++;
}
}
for (int i = 0; i < arr.length; i++) {
if(arr[i]%2==0){
arr2[index]=arr[i];
index++;
}
}
System.out.println("转换后"+Arrays.toString(arr2));
}
//实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素
// 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3},
// 修改之后为 {2, 4, 6}
public static void transform(int arr[]){
for (int i=0;i< arr.length;i++){
arr[i]=arr[i]*2;
}
}
public static void main2(String[] args){
int[] arr={1,2,3};
System.out.println("原数组为:"+ Arrays.toString(arr));
transform(arr);
System.out.println("修改之后为:"+ Arrays.toString(arr));
}
}
}
习题举例完了,这些都是比较基础的操作,但是平时也不能不复习,否则若干天之后你连看都看不懂~一定要记住学习是一个积累的过程~
来看看二维数组:(和C差不多,直接上代码锻炼读代码能力)
java
public static void main(String[] args) {
//不规则二维数组
int[][] arr=new int[2][];
arr[0]=new int[4];//第一行四个
arr[1]=new int[6];//第二行六个
for (int i=0;i< arr.length;i++){
for (int j =0;j<arr[i].length;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}
public static void main1(String[] args) {
//二维数组
//java中二维数组是一个特殊的一维数组,每一行都是一个新的地址
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
int[][] arr2=new int[][]{{1,2,3},{4,4,5}};
int[][] arr3=new int[2][3];
//java中二维数组不可以省略行
int[][]arr4=new int[2][];//不规则二维数组
//遍历
/*for (int i = 0; i < 2; i++) {
for (int j=0;j<3;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}*/
System.out.println();
//java中二维数组是一个特殊的一维数组,每一行都是一个新的地址
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println();
//也就是说arr数组其实是两个元素,每个元素都是一个数组
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
System.out.println();
for (int[] tmp : arr) { // 遍历二维数组的每一行
for (int x : tmp) { // 遍历当前行的每个元素
System.out.print(x + " "); // 打印元素加空格
}
System.out.println(); // 换行到下一行
}
}
如果有什么遗漏的欢迎补充~
学尔不思则罔,思而不学则殆。希望大家在学习完基础知识之后不要忘记拿着这些知识去刷题,增强记忆力以及培养思考能力以及写出良好代码的习惯。希望除了在博客分享基础外还能再在力扣、洛谷再次见面~