Java课程实验报告实验⼆——⼀维数组
⼀、实验⽬的
学习⼀维数组的⽤法、⽅法的定义和调⽤。
⼆、实验内容
1. 编写程序,读取1-100之间的整数,然后计算每个数出现的次数。假定输⼊是以0结束的。以下是程序运⾏⽰例:
输⼊1-100之间的整数:2 5 5 4 3 23 2 0 [回车]
2 出现 2 次
3 出现 1 次
4 出现 1 次
5 出现 2 次
23 出现 1 次
2. 编写⼀个⽅法,求出整数数组中最⼩元素的下标。如果这样的元素个数⼤于1,则返回最⼩下标。使⽤下⾯的⽅法头:
public static int indexofSmallestElement(double[] array)
编写测试程序,提⽰⽤户输⼊10个数字,调⽤这个⽅法,返回最⼩元素的下标,然后显⽰这个下标值。
3. 编写程序, 读⼊10个数并显⽰互不相同的数(即⼀个数出现多次,但仅显⽰⼀次)。提⽰,读⼊⼀个数,如果它是⼀个新数,则将它存储在数组中,如果该数已经在数组中,则忽略它。输⼊之后,数组包含的都是不同的数。以下是运⾏⽰例:
输⼊10个整数:1 2 3 2 1 6 3 4 5 2
互不相同的数为:1 2 3 6 4 5
4. 如果两个数组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
java定义一维数组并赋值输⼊list2: 5 2 5 6 1 6
这两个数列是不同的
5. (附加题
6.31 信⽤卡号的合法性,可选做)信⽤卡号遵循下⾯的模式。⼀个信⽤卡号必须是13-16位的整数。它的开头必须是:
4,指visa卡
5,指master卡
37,指American Express卡
6,指Discovery卡
在1954年,IBM的Hans Luhn提出⼀种算法,该算法可以验证信⽤卡号的有效性。这个算法在确定输⼊的卡号是否正确,或者这张信⽤卡是否能被正确扫描是⾮常有⽤的。该⽅法通常被称为Luhn检测或Mod10 检测,描述如下(假设卡号是4388576018402626)
(1)从右⾄左对偶数位上的数字翻倍。如果数字翻倍后是⼀个两位数,那么就将这两位加在⼀起得到⼀位数。
2 * 2 = 4
2 * 2 = 4
4 * 2 = 8
1 *
2 = 2
6 * 2 = 12(1+2=3)
5 * 2 = 10(1+0=1)
8 * 2 = 16(1+6=7)
4 * 2 = 8
(2)将第⼀步得到的所有⼀位数相加。
4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37
(3)将卡号⾥从右往左奇数位上所有数字相加。
6 + 6 + 0 + 8 + 0 +
7 +
8 + 3 = 38
(4)将第⼆步和第三步得到的结果相加。
37 + 38 = 75
(5)如果第四步得到的结果能被10整除,则卡号是合法的,否则是不合法的。
75 % 10 != 0
编写程序,提⽰⽤户输⼊⼀个long型整数的信⽤卡号码,显⽰这个数字是合法还是⾮法的。使⽤下⾯的⽅法设计程序:
/*Return true if the card number is valid*/
public static boolean isValid(long number)
/*Get the result from step 2*/
public static int sumOfDoubleEvenPlace(long number)
/*Return this number if it is a single digit, otherwise return the sum of the two digits*/
public static int getDigit(int number)
/*Return sum of odd place digits in number*/
public static int sumOfOddPlace(long number)
/*Return true if the digit d is a prefix for number*/
public static boolean prefixMatched(long number,int d)
/*Return the number of digits in d*/
public static int getSize(long d)
/*Return the first k number of digits from number. If the number of digits in number is less than k, return number*/
public static long getPrefix(long number,int k)
三、实验结果与分析
(1) 计数器实验
1. 实验运⾏
⾸先是提⽰输⼊1-100的整数,以0为结尾;
然后输⼊任意个数个1-100的数值(在这⾥使⽤含重复的数据)
回车,出现每个数字的计数结果(按升序排列)
对于含多次重复的数据,程序运⾏⽆误
对于错误数据,程序进⾏提⽰处理并重新输⼊
2. 结果分析
A.实验思路
⾸先根据提⽰输⼊1-100内的数并存在num数组中(暂定101个数为封顶),在输⼊的时候判定是否为0,如果为0输⼊停⽌;
再从1到100对数组进⾏遍历查,只要查到⼀个就将该数据存到结果数组中,每查到⼀次计数器+1,查完毕后将计数器结果对应存在计数数组中,如果没查到就不做任何处理到下⼀个;
最后将结果数组和计数数组对应输出即可;
B.实验改进
在判断输⼊是否为0的同时判断数据是否超过范围,如果超过,提⽰超出范围并重新输⼊;
实现⽅式:使⽤while(true)和break结构
(2) 返回最⼩下标
1. 实验运⾏
⾸先提⽰输⼊⼗个数字
输⼊
回车
针对有重复最⼩数值的输⼊,返回的是index的最⼩值
2. 结果分析
A.实验思路
⾸先提⽰输⼊⼗个数字并将其存在数组中;
再调⽤函数处理,函数内部⾸先取第⼀个元素暂定为min,index记为0,再每次取⼀个元素与min对⽐,
如果⼩于min则更新min并将index 赋成当前下标,否则不处理继续操作,遍历完毕后返回index;
B.实验改进
题⽬限制,暂⽆改进;
(3)显⽰不同的数
1. 实验运⾏
⾸先根据提⽰输⼊⼗个数字
输⼊(含重复数字)
回车
2. 结果分析
A.实验思路
⾸先确定计数器为不同的数字个数计数,并开⼀个数组存储不同的数字;
然后根据提⽰输⼊数字,对每⼀个数字进⾏判断,对已经在储存不同数字的数组进⾏遍历,如果存在⼀个数和输⼊的数相等则不处理继续操作;如果没有相同的数则将输⼊的数存到数组中;
最后将数组元素输出即可;
B.实验改进
题⽬限制,暂⽆改进;
(4)判定相同与否
1. 实验运⾏
⾸先根据提⽰,先输⼊数字个数,再输⼊数字内容
输⼊后,如果个数相同⽽数字不同,返回不同的提⽰
如果个数和数字相同,返回相同的提⽰
如果个数不同,返回不同的提⽰
2. 结果分析

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。