目录
一、实验目的
学习一维数组的用法、方法的定义和调用。
二、实验内容(包含代码及运行结果)
1. (P236, 7.3)编写程序,读取1-100之间的整数,然后计算每个数出现的次数。假定输入是以0结束的。以下是程序运行示例:
输入1-100之间的整数:2 5 5 4 3 23 2 0 [回车] 2 出现 2 次 3 出现 1 次 4 出现 1 次 5 出现 2 次 23 出现 1 次 |
代码:
import java.util.Scanner;
public class Program1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] num = new int[100];
System.out.println("请输入1-100之间的整数(输入0结束):");
//一边输入,一边记录个数
while(true)
{
int a = input.nextInt();
if(a < 0 || a > 100){
System.out.println("您输入的"+a+"不符合要求!");
continue;
}
if(a != 0){
num[a-1]++;
}else
break;
}
//用foreach循环输出
int count = 0;
for (int e:num) {
count++;
if(e != 0)
System.out.println(count+"出现了"+e+"次");
}
}
}
运行结果及分析:
测试数据1
输入实验给定的数据,程序运行正确,结果如图1所示:
图1 实验2-1测试数据1的运行结果截图
测试数据2
输入临界数据“100”以及错误数据“200”“-1”,程序会提醒用户输入错误并剔除错误数据,实验结果如图2所示:
图2 实验2-1测试数据2运行结果
通过以上测试数据可知程序符合要求。
2. (P237,7.10)编写一个方法,求出整数数组中最小元素的下标。如果这样的元素个数大于1,则返回最小下标。使用下面的方法头:
public static int indexofSmallestElement (double[] array)
编写测试程序,提示用户输入10个数字,调用这个方法,返回最小元素的下标,然后显示这个下标值。
代码:
import java.util.Scanner;
public class Program2 {
public static int indexofSmallestElement(double[] array){
int ans=0; //存储数组中最小元素的下标
double min=array[0];
for (int i = 0; i < array.length; i++) {
if(array[i] < min)
{
min = array[i];
ans = i;
}
}
return ans;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double[] num = new double[10];
System.out.print("请输入十个数字:");
for (int i = 0; i < 10; i++)
num[i] = input.nextDouble();
System.out.println("将这些数字存入数组,该数组中最小元素的下标为:"+indexofSmallestElement(num));
}
}
测试数据1
程序直接返回最小元素在数组中的下标:9
测试数据2
如图,当输入的数字中最小元素的个数不止一个时,程序返回最小元素的最小下标:
由程序运行结果知,此程序完全符合要求。
3. (P236,7.5)编写程序, 读入10个数并显示互不相同的数(即一个数出现多次,但仅显示一次)。提示,读入一个数,如果它是一个新数,则将它存储在数组中,如果该数已经在数组中,则忽略它。输入之后,数组包含的都是不同的数。以下是运行示例:
输入10个整数:1 2 3 2 1 6 3 4 5 2
互不相同的数为:1 2 3 6 4 5
代码展示:
import java.util.Scanner;
public class Program2 {
public static int indexofSmallestElement(double[] array){
int ans=0; //存储数组中最小元素的下标
double min=array[0];
for (int i = 0; i < array.length; i++) {
if(array[i] < min)
{
min = array[i];
ans = i;
}
}
return ans;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double[] num = new double[10];
System.out.print("请输入十个数字:");
for (int i = 0; i < 10; i++)
num[i] = input.nextDouble();
System.out.println("将这些数字存入数组,该数组中最小元素的下标为:"+indexofSmallestElement(num));
}
}
运行结果及分析:
测试数据1
输入题目给定数据,运行可得正确结果,运行结果如下图所示:
测试数据2
输入重复率大的十个数,程序仍可得到正确结果,如下图所示:
通过以上测试数据可知程序符合要求。
4.(P240,7.27)如果两个数组list1和list2内容相同,那么就说它们是相同的。使用下面的方法头编写一个方法,如果list1和list2是相同的,该方法就返回true:
public static boolean equal(int[ ] list1, int[ ] list2)
编写一个测试程序,提示用户输入两个整数数列,然后显示它们两个是否相同。以下是运行示例。注意输入的第一个数字表示数列中元素的个数。
提示:可考虑使用230-231页Arrays类提供的方法进行组合调用
输入list1: 5 2 5 6 6 1 输入list2: 5 5 2 6 1 6 这两个数列是相同的 |
输入list1: 5 5 5 6 6 1 输入list2: 5 2 5 6 1 6 这两个数列是不同的 |
代码:
import java.util.Scanner;
public class Program4 {
public static boolean equal(int[ ] list1, int[ ] list2){
if(list1.length != list2.length)
return false;
java.util.Arrays.sort(list1);
java.util.Arrays.sort(list2);
for (int i = 0; i < list1.length; i++) {
if(list1[i] != list2[i])
return false;
}
return true;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//输入
System.out.println("请输入两个整数数列(先输入数列大小)");
int size1,size2;
System.out.print("输入list1的大小:");
size1 = input.nextInt();
int[] list1 = new int[size1];
System.out.print("输入list1:");
for (int i = 0; i < size1; i++) {
list1[i] = input.nextInt();
}
System.out.print("输入list2的大小:");
size2 = input.nextInt();
int[] list2 = new int[size2];
System.out.print("输入list2:");
for (int i = 0; i < size2; i++) {
list2[i] = input.nextInt();
}
if(equal(list1,list2))
System.out.println("这两个数列是相同的!");
else
System.out.println("这两个数列是不同的!");
}
}
运行结果及分析:
测试数据1
输入题目给定测试数据1,运行可得正确结果,运行结果如下图所示:
测试数据2
输入题目给定测试数据2,运行可得正确结果,运行结果如下图所示:
测试数据3
当输入的两个数列大小不同时,程序仍可得正确结果
通过以上测试数据可知程序完全符合要求。
三. 心得体会
实验2-1:
题目无其它特别要求,所以就开辟一个1大小为100的整型数组;然后运行正确,又考虑到容错性,于是又加了个判断,可以提醒用户输入的数据错误,并自动剔除错误数据。
实验2-2:
题目给定数组大小,所以直接一个循环输入。刚开始本想用foreach循环进行输入,但发现运行错误,上网查了下得知:foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改.后续改正即得正确结果
实验2-3:
在这个实验里,放了个小小的错误,就是在第二重循环中,把i和j给混淆了,检查代码发现错误后,程序运行即可得正确结果。日后两重循环尽量不再犯这种错误。
实验2-4:
判断两数组内容是否相同,第一想法就是java.util.Arrays 类中的java.util.Arrays.equals();但调试后发现这个方法判断的是要两个数组中的元素完全相同,包括了顺序,所以与题目要求不符合。那么就再用java.util.Arrays 类中的java.util.Arrays.sort()方法排序后再判断,问题就解决了。我充分感受到了Java的库中各种函数的方便,但要去使用的前提还是,还是得完全把每个方法的作用弄清楚,避免出错。