学习笔记03从零开始学java-第四章课后习题

学习笔记03-第四章 数组

用书参考:孙连英,刘畅,彭涛所著的Java面向对象程序设计。
我的所有代码你都可以通过GitHub获取,
以下为我的GitHub地址:[[https://github.com/MrNeoJeep/java-code.git]]

(1)现有一个数组,要求去掉其中值为1的项,生成一个新数组

代码

public class Text4_1 {
    
    

	
	public static void main(String[] args) {
    
    
		// this chapter is about array;
		//现有一个数组,要求去掉其中值为1的项,生成一个新数组
		int oldArr[] = {
    
    1,3,5,1,1,6,6,1,5,7,6,7,1,5};
		int newArr[] = new int[20];//注意:int newArr[] = new int[];是不被允许的
		int size = 0;
		for(int i = 0;i < oldArr.length;i++)
		{
    
    
			if(oldArr[i] != 1)
			{
    
    
				newArr[size] = oldArr[i];
				size++;
			}
		}
		//遍历新数组
		for(int i = 0 ; i < size ;i++)
		{
    
    
			System.out.print(newArr[i] + " ");
		}
	}

}

运行结果

在这里插入图片描述

(2) 在体操或跳水比赛中,每个选手的得分的计算方法使去掉一个最高分和一个最低分,然后加上其他得分。编写一个程序,使用户能输入8个裁判的评分,然后输出选手的得分。裁判在1~10内打分。

代码

import java.util.Scanner;

public class Text4_2 {
    
    

	public static void main(String[] args) {
    
    
		// 在体操或跳水比赛中,每个选手的得分的计算方法使去掉一个最高分和一个最低分,然后加上其他得分
		//编写一个程序,使用户能输入8个裁判的评分,然后输出选手的得分。裁判在1~10内打分。
		
		//输入
		Scanner sc = new Scanner(System.in);
		double [] arr = new double[8];
		for(int i = 0; i < 8;i++)
		{
    
    
			
			System.out.printf("请第%d位裁判评分(评分区间为1~10):\n",i+1);
			double temp = sc.nextDouble();
			if(temp > 10 || temp < 1)
			{
    
    
				System.out.println("输入有误");
				return;
			}
			else {
    
    
				arr[i] = temp;
			}
			
		}
		
		//找到最大值和最小值并删除
		//找最大和最小
		double maxNum = arr[0];
		double minNum = arr[0];
		for(int i = 0; i < arr.length; i++)
		{
    
    
			if(arr[i] > maxNum)
			{
    
    
				maxNum = arr[i];
			}
			if(arr[i] < minNum)
			{
    
    
				minNum = arr[i];
			}
		}
		//删除数组中的元素  创建一个新的数组
		double res[] = new double[6];
		int size = 0;
		for(int i = 0; i < 8 ; i++)
		{
    
    
			if(arr[i] != maxNum && arr[i] != minNum)
			{
    
    
				res[size] = arr[i];
				size++;
			}
		}
		//求和
		double sum  = 0;
		for(int i = 0 ; i <res.length;i++ )
		{
    
    
			sum += res[i];
			//System.out.println(res[i]);
		}
		System.out.printf("选手的总得分为:%.2f\n", sum);
		sc.close();
	}

}

运行结果

在这里插入图片描述

(3)编写一个程序,使用户输入选举中的五位竞选人的姓名,每位竞选人的得票数,程序输出每位竞选人的姓名,得票数和得票数占占总投票数的百分比,还要输出本次比赛的第一名。

代码

public class Text4_3 {
    
    

	public static void main(String[] args) {
    
    
		// 编写一个程序,使用户输入选举中的五位竞选人的姓名,每位竞选人的得票数,程序输出
		//每位竞选人的姓名,得票数和得票数占占总投票数的百分比,还要输出本次比赛的第一名
		Scanner sc = new Scanner(System.in);
		//定义两个数组存放姓名和得票数
		String name[] = new String [5];
		int vote[] = new int[5];
		for(int i = 0; i < 5;i++)
		{
    
    
			System.out.println("请输入第"+(i+1)+"竞选人的姓名与票数,用逗号分隔:");
			String temp = sc.next();
			String arr[] = temp.split("\\,");
			name[i] = arr[0];
			int num = Integer.parseInt(arr[1]);
			if(num < 0)
			{
    
    
				System.out.println("输入有误");
				return;
			}
			vote[i] = num;
		}
		
		int sum = 0;
		for(int i = 0; i < vote.length;i++)
		{
    
    
			sum += vote[i];
		}
		//输出
		for(int i = 0;i < 5;i++)
		{
    
    
			System.out.printf("第%d位竞选者姓名为:%s ,得票数:%d ,得票数占总投票数的百分比:%.2f%%\n" ,i+1, name[i] , vote[i]
					, ((double)vote[i]/sum)*100);
		}
	}

}

运行结果

在这里插入图片描述

(4)给定一个数组,写一个expand函数,把原有数组扩容一倍,并保留原有数组的内容

代码

public class Text4_4 {
    
    

	public static void main(String[] args) {
    
    
		// 给定一个数组,写一个expand函数,把原有数组扩容一倍,并保留原有数组的内容
		int []a = {
    
    1,2,3};
		a =expand(a);
		for(int i = 0; i < a.length;i++)
		{
    
    
			System.out.print(a[i] + " ");
		}
		System.out.println();

	}
	public static int[] expand(int arr[])
	{
    
    
		//扩容
		int [] b = new int[arr.length*2];
		//方法一、利用arraycopy进行扩容
		System.arraycopy(arr, 0, b, 0, arr.length);
		//方法二、赋值
//		for(int i = 0; i < arr.length;i++)
//		{
    
    
//			b[i] = arr[i];
//		}
		//方法三、利用java的方法
		//int [] b = java.util.Arrays.copyOf(arr, arr.length*2);
		return b;
	}

}

运行结果

在这里插入图片描述

(5)飞机分配座位。编写一个程序,用于分配一家商务飞机的座位。该飞机有13排座位每排六个座位。第一排,第二排是头等舱,其余是经济舱。程序必须提示用户输入如下信息 机票类型(头等/经济)*代表可选,#代表已分配。将程序开发为菜单驱动,显示用户的选择。

代码

import java.util.Scanner;


public class Text4_5 {
    
    

	public static void main(String[] args) {
    
    
		/*飞机分配座位。编写一个程序,用于分配一家商务飞机的座位。该飞机有13排座位
		 * 每排六个座位。第一排,第二排是头等舱,其余是经济舱。程序必须提示用户输入如下信息
		 * 机票类型(头等/经济)
		 * *代表可选,#代表已分配。将程序开发为菜单驱动,显示用户的选择。
		*/
		String [][]seat = new String [13][6];
		for(int i = 0; i < 13;i++)
		{
    
    
			for(int j = 0; j < 6;j++)
			{
    
    
				seat[i][j] = "*";
			}
		}
		boolean  flag = true;
		Scanner scanner = new Scanner(System.in);
		System.out.println("1,显示剩余座位");
		System.out.println("2,选择机票类型");
		System.out.println("3,退出");
		while(flag)
		{
    
    
			int key = scanner.nextInt();
			switch (key) {
    
    
			case 1:
				show(seat);
				break;
			case 2:
				choice(seat);
				break;
			case 3:
				flag = false;
				scanner.close();
				System.out.println("欢迎下次使用!");
				break;
			default:
				break;
			}
		}
	}
	//1、显示
	public static void show(String seat[][] )
	{
    
    
		for(int i = 0; i < 13;i++)
		{
    
    
			for(int j = 0; j < 6;j++)
			{
    
    
				System.out.print(seat[i][j] + " ");
			}
			System.out.println();
		}
	}
	//2、选择
	public static void choice(String seat[][])
	{
    
    
		Scanner scanner = new Scanner(System.in);
		System.out.println("1,头等舱");
		System.out.println("2,经济舱");
		System.out.println("请输入你的选择:");
		int num = scanner.nextInt();
		if(num == 1)
		{
    
    
			System.out.println("请选择前两排的位置,并输入行列数(逗号分隔):");
			String temp1 = scanner.next();
			String[] arr = temp1.split("\\,");
			int row = Integer.parseInt(arr[0]);//行
			int line = Integer.parseInt(arr[1]);//列
			if(row > 2)
			{
    
    
				System.out.println("输入错误");
				return;
			}
			seat[row][line] = "#";
		}
		else if(num == 2) 
		{
    
    
			System.out.println("请选择3-13排的位置,并输入行列数:");
			String temp2 = scanner.next();
			String[] arr = temp2.split("\\,");
			int row = Integer.parseInt(arr[0]);//行
			int line = Integer.parseInt(arr[1]);//列
			if(row < 2)
			{
    
    
				System.out.println("输入错误");
				return;
			}
			seat[row][line] = "#";
		}
		System.out.println("请输入你的选择:");
	}

}

运行结果

在这里插入图片描述
在这里插入图片描述

(6)编写一个程序,使用二维数组存储一年中每个月的最高气温和最低气温。该程序输出一年中的最高气温的平均值,最低气温的平均值,最高气温,最低气温

代码

import java.util.Scanner;

public class Text4_6 {
    
    

	public static void main(String[] args) {
    
    
		/*编写一个程序,使用二维数组存储一年中每个月的最高气温和最低气温。该程序输出一年中的最高
		气温的平均值,最低气温的平均值,最高气温,最低气温。该程序必须由以下方法组成:
		1、getData()方法:读取数据并将数据存储到二维数组中
		2、averageHeight()方法:计算并返回一年中最高气温的平均值
		3、averageLow()方法:计算并返回一年中最低气温的平均值
		4、indexHighTemp()方法:返回数组中最高气温的索引
		5、indexLowTemp()方法:返回数组中最低气温的索引
		*/
		
		double [][]temperature = new double[12][2];
		temperature = getData(temperature);
		double averageHeight = averageHeight(temperature);
		double averageLow = averageLow(temperature);
		int maxIndex = indexHighTemp(temperature);
		int minIndex = indexLowTemp(temperature);
		System.out.printf("一年中最高气温的平均值:%.2f\n",averageHeight );
		System.out.printf("一年中最低气温的平均值:%.2f\n" ,averageLow );
		System.out.println("最高气温的索引:" + maxIndex );
		System.out.println("最低气温的索引:" + minIndex );
	}
	//1、获取数据
	public static double[][] getData(double temperature[][])
	{
    
    
		Scanner sc = new Scanner(System.in);
		for(int i = 0;i < 12;i++)
		{
    
    
			System.out.println("请分别输入"+(i+1)+"月的最高气温,最低气温(用空格分隔)");
			String s = sc.nextLine();
			String arr[] = s.split(" ");
			double maxTem = Double.parseDouble(arr[0]);
			double minTem = Double.parseDouble(arr[1]);
			temperature[i][0] = maxTem;
			temperature[i][1] = minTem;
		}
		sc.close();
		return temperature;
	}
	//2、计算并返回一年中最高气温的平均值
	public static double averageHeight(double temperature[][])
	{
    
    
		double maxTemAll = 0;
		for(int i = 0;i < 12;i++)
		{
    
    
			maxTemAll += temperature[i][0];
		}
		return (double)maxTemAll/12;
	}
	//2、计算并返回一年中最低气温的平均值
	public static double averageLow(double temperature[][])
	{
    
    
		double minTemAll = 0;
		for(int i = 0;i < 12;i++)
		{
    
    
			minTemAll += temperature[i][1];
		}
		return (double)minTemAll/12;
	}
	//3、返回数组中最高气温的索引
	public static int indexHighTemp(double temperature[][])
	{
    
    
		int max = 0;
		for(int i = 0;i < 12;i++)
		{
    
    
			if(temperature[max][0] < temperature[i][0])
			{
    
    
				max = i;
			}
		}
		return max;
	}
	//4、返回数组中最低气温的索引
	public static int indexLowTemp(double temperature[][])
	{
    
    
		int min = 0;
		for(int i = 0;i < 12;i++)
		{
    
    
			if(temperature[min][1] > temperature[i][1])
			{
    
    
				min = i;
			}
		}
		return min;
	}
	

}

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
初学java,代码多有愚钝之处,如果你发现了错误或有更好的解法,欢迎你在评论区或私信给我,我将不胜感激!

猜你喜欢

转载自blog.csdn.net/qq_50195602/article/details/114956063