第一题
编写程序,读取1-100之间的整数,然后计算每个数出现的次数。假定输入是以0结束的。以下是程序运行示例:
(1)源代码:
package 实验2;
import java.util.Scanner;
public class Program1 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
//创建数组,array数组储存输入的数,count数组为计数数组
int[] array = new int[20];
int[] count = new int[100];
for(int i=0;i<100;i++){
count[i]=0;
}
//设置bool值来判断是否输入有误
boolean bool = true;
//输入操作
System.out.println("请依次输入0~100之间的数,以输入0作为结尾(0不考虑进去)");
for(int i=0;;i++){
array[i] = input.nextInt();
if(array[i]==0){
break;
}
else if(array[i]<0||array[i]>=100){
bool=false;
break;
}
count[array[i]]++;
}
if(!bool){
System.out.println("您输入了不符合要求的数");
}//必须有的判断,不然就会出现数组越界的情况
else{
for(int i=0;i<100;i++){
if(count[i]!=0){
System.out.println(i+" 出现"+count[i]+"次");
}
}
}
}
}
(2)效果
测试一:
测试二:
(3)结果分析与心得体会
测试1结果没有问题,测试2输入了123为不符合要求的数,所以有图示输出。测试2是做好本题的关键,若考虑不周会导致数组越界报错,一定要注意
第二题
编写一个方法,求出整数数组中最小元素的下标。如果这样的元素个数大于1,则返回最小下标。使用下面的方法头:
public static int indexofSmallestElement(double[] array)
编写测试程序,提示用户输入10个数字,调用这个方法,返回最小元素的下标,然后显示这个下标值。
(1)源代码:
package 实验2;
import java.util.Scanner;
public class Program2 {
public static int indexofSmallestElement(double[] array){
int result=0;
double min=array[0];
for(int i=1;i<10;i++){
if(array[i]<min){
min = array[i];
result = i;
}
}
return result;
}
public static void main(String[] args) {
System.out.println("请输入10个数字");
Scanner input = new Scanner(System.in);
double[] a = new double[10];
for(int i=0;i<10;i++){
a[i] = input.nextInt();
}
System.out.println("这10个数中最小数的(最小)下标为:"+indexofSmallestElement(a));
}
}
(2)效果:
测试1:
测试2:
(3)结果分析与心得体会
测试1:10个数中最小的数为3,是第8个,所以下标为7
测试2:10个数中最小的数为2,位于第三个和第七个的位置,所以最小下标为2
本题用了min和result分别储存最小数和最小下标,两个最小容易弄混,要保持思路清晰
第三题
编写程序, 读入10个数并显示互不相同的数(即一个数出现多次,但仅显示一次)。提示,读入一个数,如果它是一个新数,则将它存储在数组中,如果该数已经在数组中,则忽略它。输入之后,数组包含的都是不同的数。以下是运行示例:
输入10个整数 :1 2 3 2 1 6 3 4 5 2
互不相同的数为:1 2 3 6 4 5
(1)源代码:
package 实验2;
import java.util.Scanner;
public class Program3 {
public static void main(String[] args) {
System.out.print("输入10个整数:");
Scanner input = new Scanner(System.in);
double[] a = new double[10];
for(int i=0;i<10;i++){
a[i] = input.nextDouble();
}
System.out.print("互不相同的数有:");
for(int i=0;i<10;i++){
int count=0;
for(int j=0;j<i;j++){
if(a[i]==a[j]){
count++;
}
}
if(count==0){
System.out.print(a[i]+" ");
}
}
}
}
(2)效果
测试1:
测试2:
(3)结果分析与心得体会
测试1输入的10个整数互不相同,直接输出
测试2中输入了10个数,相同的只算一个后只剩下5个数
本题使用的思路和老师的有区别,老师的是在储存数组的时候判断是否与之前储存的有重复从而不重复储存,而本代码思路为全部储存,输出的时候不重复输出。条条道路通罗马,没其他感想。
第四题
如果两个数组list1和list2内容相同,那么就说它们是相同的。使用下面的方法头编写一个方法,如果list1和list2是相同的,该方法就返回true:
public static boolean equal(int[ ] list1, int[ ] list2)
编写一个测试程序,提示用户输入两个整数数列,然后显示它们两个是否相同。以下是运行示例。注意输入的第一个数字表示数列中元素的个数。
(1)源代码:
package 实验2;
import java.util.Scanner;
public class Program4 {
public static boolean equal(int[ ] list1, int[ ] list2,int size){
int count = 0;
for(int i=0;i<size;i++){
if(list1[i]!=list2[i]){
count++;
}
}
if(count==0) return true;
else return false;
}
public static void main(String[] args) {
//新建数组申请空间
int[] array1 = new int[10];
int[] array2 = new int[10];
Scanner input = new Scanner(System.in);
//输入操作
System.out.print("现在输入第一个数列的项数:");
int size1 = input.nextInt();
System.out.print("现在请分别输入第一个数列的数:");
for(int i=0;i<size1;i++){
array1[i] = input.nextInt();
}
System.out.print("现在输入第二个数列的项数:");
int size2 = input.nextInt();
System.out.print("现在请分别输入第二个数列的数:");
for(int i=0;i<size2;i++){
array2[i] = input.nextInt();
}
//进行判断
if(size1!=size2){
System.out.println("这两个数列是不同的");
}
else if(size1==size2){
if(equal(array1,array2,size1)){
System.out.println("这两个数列是相同的");
}
else if(!equal(array1,array2,size1)){
System.out.println("这两个数列是不同的");
}
}
}
}
(2)效果:
测试1:
测试2:
测试3:
(3)结果分析与心得体会
测试1:项数不同,数列不可能相同
测试2:项数相同,每一项都相同,故这两个数组相同
测试3:项数相同,第二项不同,故这两个数组不相同
测试1容易被忽略,一定要注意,数列相同前提条件项数必须相同。本题输出形式与提示输入有区别,笔者认为直接让项数和每一项具体的数分开输入的用户体验更好。