学习java随堂练习-20220610

今天是学习Java的第九天 3道练习题

第1题

题目:

1、一组乱序的字符序列m、b、p、f、a、u、z,请用冒泡排序算法,使之按字母表顺序排列

运行结果:

代码如下:

/**
 * 1、一组乱序的字符序列m、b、p、f、a、u、z,请用冒泡排序算法,使之按字母表顺序排列
 * */
public class array01 {
          
   

	public static void main(String[] args) {
          
   
		char[] chara = {
          
   m,b,p,f,a,u,z};
		int len = chara.length;
		for(int i = 0;i<len-1;i++) {
          
   
			boolean flag = false;//false表示没交换  true表示交换过
			for(int j = 0;j<len-1-i;j++) {
          
   
				if(chara[j]>chara[j+1]) {
          
   
					char temp = chara[j];
					chara[j]= chara[j+1];
					chara[j+1]=temp;
					flag = true;
				}
			}
			if(!flag) {
          
   
				break;
			}
		}
		for(char n:chara) {
          
   
			System.out.print(n+" ");
		}
		
		
		
	}
}

第2题

题目:

2、一组有序的字符序列a、b、c、e、f、p、u、z,向次字符序列中插入一个新的字符,要求插入之后字符序列仍保持有序

运行结果:

代码如下:

/**
 * 2、一组有序的字符序列a、b、c、e、f、p、u、z,
 * 向次字符序列中插入一个新的字符,要求插入之后字符序列仍保持有序
 * */
public class array02 {
          
   
	public static void main(String[] args) {
          
   
		char[] char1 = {
          
   a,b,c,e,f,p,u,z};//第1个数组
		int len1 = char1.length;
		char[] char2 = new char[len1+1];//第2个数组
		
		char cha = d;//插入d
		
		/**
		 * 分析:插入d
		 * char1	a	b	c	e	f	p	u	z
		 * char2	a	b	c	d
		 * []		0	1	2	3	4
		 * count	1	2	3	4	5
		 * */
		int count = 0;//记录插入了几个元素
		for(int i = 0;i<len1;i++) {
          
   //循环插入char1中比待插元素小的元素
			if(char1[i]<=cha) {
          
   
				char2[i]=char1[i];
				count++;
			}
		}
		
		char2[count]=cha;//插入待插元素
		
		
		//循环插入剩余char1的元素
		for(int j = count;j<len1;j++) {
          
   //这里count的值正好是剩余char1元素中第一个元素的下标
			char2[j+1]=char1[j];
		}
		
		for(char n:char2) {
          
   //打印输出
			System.out.print(n+" ");
		}
		

	}
}

第3题

题目:

3、判断一个数组是否有序(选做)

运行结果:

代码如下:

/**
 * 3、判断一个数组是否有序(选做)
 * */
import java.util.Scanner;
public class array03 {
          
   
	public static void main(String[] args) {
          
   
		//int[] nums = {11000,2,100,4,5,8,7,9,10,11};
		int[] nums = new int [10];
		
		System.out.println("请输入一个数组:");
		Scanner input = new Scanner(System.in);
		
		for(int i=0;i<10;i++) {
          
   
			nums[i] = input.nextInt();
		}
		
		
		/**
		 * 思路:分别判断这个数组是否是正序,是否是逆序。若是两者其中之一,则有序,否则无序。
		 * */
		
		boolean flag1 = true;//false表示无序,true表示正序
		for(int j=1;j<10;j++) {
          
   
			if(nums[j-1]>nums[j]) {
          
   //只要出现相邻两个逆序,则为false
				flag1 = false;
				break;
			}
		}//循环结束时flag1=false说明不是正序
		
		
		boolean flag2 = true;//false表示无序,true表示逆序
		for(int j=1;j<10;j++) {
          
   
			if(nums[j-1]<nums[j]) {
          
   //只要出现相邻两个正序,则为false
				flag2 = false;
				break;
			}
		}//循环结束时flag2=false说明不是逆序
		
		
		//既不是正序,又不是逆序,则是无序
		if(flag1==false && flag2==false) {
          
   
			System.out.println("此数组无序");
		}else {
          
   //无序的对立事件是有序
			System.out.println("此数组有序");
		}
		
		
		

	}
}
经验分享 程序员 微信小程序 职场和发展