Javase—数组习题高阶

这篇博客探讨了Java中数组的高级使用技巧,通过一个名为Cal的封装类展示了如何利用方法对数组进行多种复杂操作。内容涵盖数组的创建、遍历、修改以及可能涉及的算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:下列代码中的Cal是一个封装类,利用方法对数组进行各种操作:Cal代码

/**
 * 1.判断一个数组里是否有重复的数
 */

package com.arrayAdd;

import java.util.*;

public class Text1 {

	public static void main(String[] args) {
		int n=0;		//判断数组里是否有重复的数;
//		构造一个含有10个随机整数的数组
		int[] a=new int[10];
		Random r=new Random();
		for(int i=0;i<a.length;i++) {
			a[i]=r.nextInt(10);
		}
		System.out.println(Arrays.toString(a));
//		判断数组里是否有重复的数
		for(int i=0;i<a.length-1;i++) {
			for(int j=i+1;j<a.length;j++) {
				if(a[i]==a[j]) {
					n++;
				}
			}
		}
		if(n!=0) {
			System.out.println("该数组里有重复的数。");
		}else {
			System.out.println("该数组里没有重复的数。");

		}
	}

}

/**
 * 2.判断数组是否是对称数组
 */

package com.arrayAdd;
import java.util.*;
public class Text2 {

	@SuppressWarnings("resource")
	public static void main(String[] args) {
		
		int n=0;			//用n来判断是否对称
//		创建一个数组,从键盘输入所有元素的值
		int m=5;
		int[] a=new int[m];
		Scanner s=new Scanner(System.in);
		System.out.println("请输入数组的"+m+"个元素值:");
		for(int i=0;i<a.length;i++) {
			a[i]=s.nextInt();
		}
		System.out.println(Arrays.toString(a));
//		判断数组是否对称
		for(int i=0;i<a.length/2;i++) {
			if(a[i]==a[a.length-i-1]) {
				n++;
			}
		}
		System.out.println(n);
		if(n==a.length/2) {
			System.out.println("该数组为对称数组。");
		}else {
			System.out.println("该数组不是对称数组。");
		}
	}

}

/**
 * 3将一个正整数如35转换成二进制码
 */

package com.arrayAdd;
import java.util.*;
public class Text3 {

	public static void main(String[] args) {
//		判断正整数转换成二进制后的位数
		int n=0;		//正整数的位数
		int temp;
		@SuppressWarnings("resource")
		Scanner s=new Scanner(System.in);
		int num=s.nextInt();
		temp=num;
		while(temp!=0) {
			temp/=2;
			n++;
		}
//		创建一个n位的数组,存储二进制的每一位
		int[] a=new int[n];
		for(int i=a.length-1;i>=0;i--) {
			a[i]=num%2;
			num=num/2;
		}
		System.out.println(Arrays.toString(a));
	}

}

/**
 * 4输出一个数组中的第二大值
 */

package com.arrayAdd;

import java.util.*;

public class Text4 {
	public static void main(String[] args) {
		int max1=0;		//存储最大数的数值
		int max2=0;		//存储第二大数的数值
		int n=0;		//存储最大数的下标
//		定义一个数组包含10个随机数
		int[] a=new int[10];
		Random r=new Random();
		for(int i=0;i<a.length;i++) {
			a[i]=r.nextInt(10);
		}
		System.out.println(Arrays.toString(a));
//		找出数组中最大的值
		for(int i=0;i<a.length;i++) {
			if(max1<a[i]) {
				max1=a[i];
				n=i;
			}
		}
//		找出除最大数以外的第二大值
		for(int i=0;i<a.length;i++) {
			if(i!=n) {
				max2=max2>a[i]?max2:a[i];
			}
		}
		System.out.println("该数组中第二大的值为:"+max2);
	}
}


/**
 * 5.去掉数组里的零形成一个没有零的新数组
 */

package com.arrayAdd;

import java.util.Arrays;
import java.util.Random;

public class Text5 {

	public static void main(String[] args) {
		int n=0;					//判断原始数组中含有0的个数
//		定义两个数组
		int[] a=new int[10];		//原始数组,含有十个0~5的随机数
		Random r=new Random();
		for(int i=0;i<a.length;i++) {
			a[i]=r.nextInt(6);
			if(a[i]==0) {
				n++;
			}
		}
		System.out.println(Arrays.toString(a));
		int[] b=new int[a.length-n];
		int k=0;					//新数组的下标
		for(int i=0;i<a.length;i++) {
			if(a[i]!=0) {
				b[k]=a[i];
				k++;
			}
		}
		System.out.println(Arrays.toString(b));
	}

}

/**
 * 6.约瑟夫环的问题(上网查找约瑟夫环的含义)
 */

package com.arrayAdd;

import java.util.*;
//约瑟夫环:n个人围坐,从k开始报数,每数到m出列,输出每次出列的序号
public class Text6 {

	public static void main(String[] args) {

//		从键盘输入总人数 n,并创建一个含有n个元素的数组
		System.out.println("请输入总人数n:");
		@SuppressWarnings("resource")
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
		int[] a=new int[n];
		for(int i=0;i<a.length;i++) {
			a[i]=i+1;
		}
//		从键盘输入报数的起始位置 k
		System.out.println("请输入报数的起始位置k(k<总人数n):");
		int k=s.nextInt();
//		从键盘输入数到多少出列
		System.out.println("请输入数到多少时出列");
		int m=s.nextInt();
//		从k开始,每到m输出后删除
		k=k+m-1;
		int[] array=a;
		while(array.length!=0) {
			if(k<=array.length) {
				System.out.println(array[k-1]);
				array=Cal.delete(k, array);
//				System.out.println(Arrays.toString(array));
				k=k+m-1;
			}else {
				k=k-array.length;
			}
		}
		
		
	}
}

/**
 * 7.定义一个数组,用来存储1 1 2 3 5 8 13……这样的Fibonacci数列,存储该数列的前20个数;
 */

package com.arrayAdd;

import java.util.Arrays;

public class Text7 {
	public static void main(String[] args) {
//		定义一个含义20个元素的数组,给前两个赋值
		int[] a=new int[20];
		a[0]=1;
		a[1]=1;
//		每个元素的值等于他的上一个加上上个
		for(int i=2;i<a.length;i++) {
			a[i]=a[i-1]+a[i-2];
		}
		System.out.println(Arrays.toString(a));
	}
}

/**
 * 8.从键盘中接收用户输入的10个数值,输出最大的三个?(两种方法实现)
 */

package com.arrayAdd;

import java.util.Arrays;
import java.util.Scanner;

public class Text8 {

	public static void main(String[] args) {
//		创建含有十个元素的数组,从键盘接收用户输入的十个数值
		int[] a=new int[5];
		int a1=0;		//数组里最大的数
		int a2=0;		//数组里第二大的数
		int	a3=0;		//数组里第三大的数
		@SuppressWarnings("resource")
		Scanner s=new Scanner(System.in);
		System.out.println("请输入五个数");
		for(int i=0;i<a.length;i++) {
			a[i]=s.nextInt();
		}
		System.out.println(Arrays.toString(a));
//		找出数组里最大的三个数并输出
//	方法一:将数组从小到大排序,输出后三位元素
		for(int i=0;i<a.length-1;i++) {
			for(int j=0;j<a.length-i-1;j++) {
				if(a[j]>a[j+1]) {
					a1=a[j];
					a[j]=a[j+1];
					a[j+1]=a1;
				}
			}
		}
		System.out.println(Arrays.toString(a));
		for(int i=a.length-1;i>a.length-4;i--) {
			System.out.println(a[i]);
		}
//		方法二:分别找出三个最大的数,将值赋给1,2,3
		for(int i=0;i<a.length;i++) {
			a1=a1>a[i]?a1:a[i];
		}
		for(int i=0;i<a.length;i++) {
			if(a[i]>=a1) {
				continue;
			}
			a2=a2>a[i]?a2:a[i];
		}
		for(int i=0;i<a.length;i++) {
			if(a[i]>=a2) {
				continue;
			}
			a3=a3>a[i]?a3:a[i];
		}
		System.out.println(a1+" "+a2+" "+a3);
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值