Day10、数组经典例题

发布于:2023-02-12 ⋅ 阅读:(514) ⋅ 点赞:(0)

1、从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分

思路:

1)声明数组来装这五位同学的成绩;

2)声明Scanner类来获取这五名同学的成绩;

3)假设数组中的第一个元素(下标为0的元素)为最大值;

4)依次取出后面的元素与假设的最大值进行比较,如果后面的元素比假设的最大值大,取代它成为新的最大值,如果比假设的最大值小,不进行替换,继续比较;

5)一直比较到最后一个元素。

代码如下

import java.util.Scanner;

public class ArraysDemo02 {
    public static void main(String[] args) {

        //1)声明一个数组用来保存五名同学的成绩
        double[] score=new double[5];

        //2)声明一个Scanner类用来输入数据
        Scanner sc=new Scanner(System.in);

        for (int i = 0; i < score.length; i++) {
            System.out.println("请输入第"+(i+1)+"位同学的成绩");
            score[i]=sc.nextDouble();
        }
        //遍历一遍查看是否录入
        for (double j : score) {
            System.out.print(j+" ");
        }
        //开始判断大小并循环
        double max=0;
        for (int i = 0; i < score.length; i++) {
            if (score[i]>max){
                max=score[i];
            }
        }
        System.out.println("成绩最高分为"+max);
    }
}

2、有一组学员的成绩{99,85,82,63, 60},将它们按降序排列。要增加一个学员的成绩,将它插入成绩序列,并保持降序

思路:

1)新建一个比原来数组长度大1的数组

2)将原来数组里的元素按照顺序存储到新的数组中

3)使用Scanner获取你要增加的学员成绩

4)通过循环比较,获取插入元素要插入的位置(下标)

5)从插入位置开始及之后的元素依次

代码如下

import java.util.Scanner;

public class ArrayDemo03 {

	public static void main(String[] args) {

		int[] scores = { 99, 85, 82, 63, 60 };

		// 1)新建一个比原来数组长度大1的数组
		int[] newScores = new int[scores.length + 1];

		// 2)将原来数组里的元素按照顺序存储到新的数组中
		// newScores[0]=scores[0];
		// newScores[1]=scores[1];
		// newScores[2]=scores[2];
		// newScores[3]=scores[3];
		for(int i =0;i<scores.length;i++){
			newScores[i]=scores[i];
		}
		
		//3)使用Scanner获取你要增加的学员成绩
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要增加的学员成绩:");
		int insert = sc.nextInt();
		
		//4)通过循环比较,获取插入元素要插入的位置(下标)
		int index = newScores.length-1;
		for(int i =0;i<newScores.length;i++){
			if(insert>newScores[i]){
				index = i;
				//一旦获取插入元素比某一个元素大,就不再往后进行比较了,结束整个比较过程
				break;
			}
		}
		
		//5)从插入位置开始及之后的元素依次往后移动一位(注意:移动的时候,从后向前移动)
		for(int i =newScores.length-1;i>index;i--){
			newScores[i]=newScores[i-1];
		}
		
		//6)移动元素之后,插入位置就空出来了,将插入元素存储到插入位置
		newScores[index]=insert;
		
		//插入元素之后,遍历数组
		for (int i = 0; i < newScores.length; i++) {
			System.out.print(newScores[i]+" ");
		}

	}

}

3、数组存储5笔购物金额,在控制台输出并计算总金额

思路:

1)声明一个长度为5的数组

2)使用Scanner获取购物金额并将金额存储到数组中

3)声明一个变量sum用来累加购物金额

4)在输入购物金额的同时,可以将购物金额累加到sum变量中

5)输出购物金额

代码如下

import java.util.Scanner;

public class ArrayDemo05 {

	public static void main(String[] args) {
		//数组存储5笔购物金额,在控制台输出并计算总金额

		//第一步:声明一个长度为5的数组
		double[] prices = new double[5];
		
		//第二步:使用Scanner获取购物金额并将金额存储到数组中
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入会员本月的消费记录:");
		
		//声明一个变量sum用来累加购物金额
		double sum = 0;
		
		for (int i = 0; i < prices.length; i++) {
			System.out.println("请输入第"+(i+1)+"笔购物金额:");
			prices[i]=sc.nextDouble();
			//在输入购物金额的同时,可以将购物金额累加到sum变量中
			sum+=prices[i];
		}
		
		//输出购物金额
		System.out.println("序号\t\t金额(元)");
		for (int i = 0; i < prices.length; i++) {
			
			System.out.println((i+1)+"\t\t"+prices[i]);
		}
		
		System.out.println("总金额\t\t"+sum);
	}

}

4、冒泡排序--升序

注意:

外层循环控制行数(外控循环控制比较的轮数)

内层循环控制列数(内层循环控制每一轮的比较次数)

public class ArrayDemo01 {

	public static void main(String[] args) {
		// 冒泡排序
		int[] nums = {11,56,94,78,33};
		//排序前输出数组
		System.out.println("排序前的数组:");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i]+" ");
		}
		System.out.println();
		
		//外层循环控制行数(外控循环控制比较的轮数)
		for(int i =0;i<nums.length-1;i++){
			//内层循环控制列数(内层循环控制每一轮的比较次数)
			for(int j =0;j<nums.length-1-i;j++){
				//比较:如果前面的元素比后面的元素大,交换位置
				if(nums[j]>nums[j+1]){
					int temp = nums[j];
					nums[j]=nums[j+1];
					nums[j+1]=temp;
				}
			}
		}
		
		System.out.println("排序后的数组:");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i]+" ");
		}

	}

}

5、冒泡排序--降序

import java.util.Scanner;

public class ArrayDemo02 {

	public static void main(String[] args) {
		
		//创建Scanner类对象
		Scanner sc = new Scanner(System.in);
		
		//准备好长度为5的数组用来存储5名学员的成绩
		double[] scores = new double[5];
		
		//从键盘输入5位学员的成绩并存储在数组中
		for (int i = 0; i < scores.length; i++) {
			System.out.println("请输入第"+(i+1)+"位学员的成绩:");
			scores[i]=sc.nextDouble();
		}
		
		//排序前输出5位学员的成绩
		System.out.println("排序前:");
		for (double d : scores) {
			System.out.print(d+" ");
		}
		System.out.println();
		
		//降序排序
		for (int i = 0; i < scores.length-1; i++) {
			for (int j = 0; j < scores.length-1-i; j++) {
				if(scores[j]<scores[j+1]){
					double temp = scores[j];
					scores[j] = scores[j+1];
					scores[j+1] = temp;
				}
			}
		}
		
		System.out.println("排序后:");
		for (double d : scores) {
			System.out.print(d+" ");
		}

	}

}