学习笔记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)编写一个程序,使用户输入选举中的五位竞选人的姓名,每位竞选人的得票数,程序输出每位竞选人的姓名,得票数和得票数占占总投票数的百分比,还要输出本次比赛的第一名。
代码
package some_tests2;
import java.util.Scanner;
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];
int maxM = (int) -2e9;
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;
if(maxM <= num)
maxM = 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);
}
for(int i = 0;i < 5;i++)
{
if(vote[i] == maxM)
System.out.println("第一名为:"+name[i]);
}
}
}
运行结果
(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,代码多有愚钝之处,如果你发现了错误或有更好的解法,欢迎你在评论区或私信给我,我将不胜感激!