计算每个数出现次数 java

问题描述

需要编写程序,读入int数,然后计算它们的出现次数,以升序表现, 以0结束。
在这里插入图片描述

程序


	private static Scanner input;

	public static void main(String[] args) {
		int[] mylist = nPrint();
		repeatNumbers(mylist);
	}

	private static void repeatNumbers(int[] mylist) {
		Arrays.sort(mylist);
		int j = 0;
		int[] number = new int[mylist.length];
		for (int i = 1; i < mylist.length; i++) {
			// System.out.println(mylist[i]);
			if (mylist[i - 1] != mylist[i]) {
				number[j] = mylist[i - 1];
				j++;
			}
		}
		number[j] = mylist[mylist.length - 1];
		int[] temp = new int[j + 1];
		for (int i = 0; i < temp.length; i++) {
			for (int k = 0; k < mylist.length; k++) {
				if (number[i] == mylist[k])
					temp[i]++;
			}
		}

		for (int i = 0; i < temp.length; i++) {
			System.out.print(number[i] + " occurs " + temp[i] + " time");
			if(temp[i]>1)
				System.out.println("s");
			else
				System.out.println();
		}

	}

	private static int[] nPrint() {
		input = new Scanner(System.in);
		System.out.print("Enter the integers between 1 ans 100:");
		int[] mylist = new int[1];
		int i = 0;
		while (true) {
			mylist[i] = input.nextInt();
			if (mylist[i] == 0)
				break;
			mylist = newArr(mylist);
			i++;
		}
		int[] newMylist;
		newMylist = Arrays.copyOf(mylist, mylist.length - 1);
		return newMylist;
	}

	private static int[] newArr(int[] mylist) {
		int[] newMylist = new int[mylist.length + 1];
		for (int i = 0; i < mylist.length; i++) {
			newMylist[i] = mylist[i];
		}
		return newMylist;
	}

分析程序

程序一开始是输入函数nPrint(),但是由于题意,我必须再加入一个扩容函数newArr来保证数组的输入正确。
然后,我使用了repeatNumbers来计算和输出,思路为先将数组排序,再用number[]数组来存放数字,数字是单一的(集合也能做到,不过有些忘记了)先用这个吧。
之后,一个一个比较计数,最后循环输出。

注意点

Arrays.copyOf()方法 可以复制数组,参数1 为旧数组,参数2数为复制长度。
Arrays.sort() 方法用于排序 参数为需排数组。
Arrays.equals()用于数组比较,(当然不是地址)参数为俩数组。
Arrays.fill()方法,填满数组,如果给俩参数 第一个应该是数组 ,第二个是填入值 数组将会被全赋值为填入值,如果为四个值 那第一个为数组,二三为开始末尾位置,四为填入值,填入时包括头不包括尾。
Arrays.binarySearch(arr,值);二分查找法。

猜你喜欢

转载自blog.csdn.net/qq_40435621/article/details/83625591
今日推荐