定义一个长度为20的数组,元素为20-40的随机数, 要求判断指定元素在数组中出现的次数,指定元素为键盘录入范围为20-40之间。
import java.util.Random;
import java.util.Scanner;
public class RndTest {
// 定义一个长度为20的数组,元素为20-40的随机数, 要求判断指定元素在数组中出现的次数,指定元素为键盘录入范围为20-40之间。
public static void main(String[] args) {
Random rnd = new Random();
Scanner in = new Scanner(System.in);
int count = 0;
int a[] = new int[20];
for(int i=0;i<20;i++) {
//确保在20~40直接的整形数
a[i] = rnd.nextInt(20)+20;
System.out.print(a[i] + "\t");
}
System.out.println("\n请输入一个数:");
int num = in.nextInt();
if(num<20 || num>40) {
System.out.println("输入错误,请确保数字在20~40之间");
System.exit(0);
}
for(int i = 0;i<20;i++) {
if(a[i]==num) {
count++;
}
}
System.out.println(num+"出现的次数是:"+count);
}
}
package com.sxt.pojo; import java.util.Objects; /** * 记录用户之前输入过的数字 */ public class Node { /** * 之前输入过的数字 */ private int key=0; /** * 这个数字出现的次数 */ private int value=0; public Node() { } public Node(int key, int value) { this.key = key; this.value = value; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Node node = (Node) o; return key==node.getKey(); } @Override public int hashCode() { return Objects.hash(value); } @Override public String toString() { return "Node{" + "key=" + key + ", value=" + value + '}'; } public int getKey() { return key; } public void setKey(int key) { this.key = key; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } }
package com.sxt.demo; import com.sxt.pojo.Node; import java.util.Scanner; /** * 代码演示 * 这个用容器更好实现点,就用数组的话还是有点麻烦 */ public class Demo { public static void main(String[] args) { try { Scanner scanner = new Scanner(System.in); //定义变量记录用户需要输入多少个数字 int inputCount = 20; //定义变量存放用户之前输入过的所有数字以及这些数字出现的次数 Node[] hasFoundNumbers = new Node[inputCount]; //定义数组时要提前指定数组的大小,但我们无法提前判断用户会输入多少个不同的数字,因此我们把数组成员的个数设置的和用户需要输入的数字一样多,这样就足够用了 //记录最后一个新数字在数组中的下标 int lastNumberIndex = -1; System.out.println("请输入20个数字,范围在20到40之间,稍后将统计每个数字出现的次数"); //循环获取20次用户输入的数字 for (int i = 0; i < inputCount; i++) { //获取用户新输入的数字 int newInputNumber = scanner.nextInt(); //判断用户输入的数字是否在20到40之间 if (newInputNumber < 20 || newInputNumber > 40) { System.out.println("请输入20到40之间的数字,您还可以输入" + (inputCount - i) + "个数字"); i = i - 1; continue; } System.out.println("您输入的数字是" + newInputNumber + "您还可以输入" + (inputCount - i - 1) + "个数字"); //创建变量记录用户现在输入的这个数字,之前是否输入过 boolean hasFound = false; //将用户新输入的数字和用户之前输入的每一个数字进行比较,看看是否有重复的 for (int checkIndex = 0; checkIndex <= lastNumberIndex; checkIndex++) { //发现之前有输入过这个数字 if (hasFoundNumbers[checkIndex].getKey() == newInputNumber) { //将该数字出现的次数加1 Node equalsNumber = hasFoundNumbers[checkIndex]; equalsNumber.setValue(equalsNumber.getValue() + 1); //使用变量记录这个数字之前已经输入过 hasFound = true; break; } } //之前没有输入过这个数字 if (!hasFound) { //将这个数字添加到新发现的数字中,键就是新输入的数字,值就是这个数字出现的次数 hasFoundNumbers[lastNumberIndex + 1] = new Node(newInputNumber, 1); lastNumberIndex++; } } for (int i = 0; i <= lastNumberIndex; i++) { System.out.println(hasFoundNumbers[i].getKey() + "出现了" + hasFoundNumbers[i].getValue() + "次"); } } catch (Exception e) { System.out.println("非法输入,程序结束"); } } }
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632