在幕课上学习好久了,虽然由于种种原因,最近一段时间没怎么来学习,但闲下来依旧会逛逛幕课,如同来看望很久之前的老朋友。
国庆没有回家,于是便产生了整理之前笔记发手记的冲动,可是打开那满满的笔记,却又胆怯了,想了想,就又看了看之前老错的作业题。呵呵,不出所料,又错了、、、、、
看过一些手记,感觉真的挺不错,这次发表的手记仅仅是想和大家分享讨论,不足之处,望指出。
1、用户从键盘输入若干个数存入数组中,用冒泡排序法对数组排序,比如:1 2 3 5 6 然后用户从键盘输入一个数,把该数插入数组中,保证插入该数后,数组还是有序的
思路分析:
插入数据后要求数据有序,所以,有两种思路:
一、先插入,后排序;
二、先对原先的数据进行排序,再插入;
准备代码:
---输出:
public class NewArray {
/**
*用户从键盘输入若干个数存入数组中,用冒泡排序法对数组排序, 比如:1 2 3 5 6 然后用户从键盘输入一个数,把该数插入数组中,
* 保证插入该数后,数组还是有序的 1 2 3 4 5 6
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] old = { 14, 56, 12, 98, 23, 27 };
System.out.print("请输入待插入的数:");
int num = sc.nextInt();
System.out.println("插入一个数之后的顺序为:");
printArray(insertByorder(old, num));
System.out.println();
System.out.println("先插入后排序-----------------");
printArray(insertbeforeSort(old, num));
}
// 方法一:先排序,再插入
public static int[] insertByorder(int[] arr, int elem) {
//排序
bubbleSort(arr);
int[] newArray = new int[arr.length + 1];
//给新数组赋值
for (int i = 0; i < arr.length; i++) {
newArray[i] = arr[i];
}
//查找插入的位置
int index = -1;
for (int i = 0; i < newArray.length; i++) {
if (arr[i] > elem) {
index = i;
break;
}
}
//元素后移
for (int j = newArray.length - 1; j > index; j--) {
newArray[j] = newArray[j - 1];
}
newArray[index] = elem;
return newArray;
}
// 方法二:先插入,再排序
public static int[] insertbeforeSort(int[] arr, int elem) {
int[] newArray = new int[arr.length + 1];
int i = 0;
//新数组赋值
for (i = 0; i < arr.length; i++) {
newArray[i] = arr[i];
}
//直接将要插入的数据放在新数组的最后位置
newArray[i] = elem;
//排序
bubbleSort(newArray);
return newArray;
}
//排序:
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
exchange(arr, j, j + 1);
}
}
}
}
//实现数据交换
public static void exchange(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//输出数组元素
public static void printArray(int[] arr) {
for (int num : arr) {
System.out.print(num + " ");
}
}
}
2、打印数组a(以int型为例)中每个数字出现的次数
思路分析:
打印数组中每个元素出现的次数===》遍历元素===》for循环;
第一次出现的元素依次与后面的元素比较===》会重复比较==》比较过的数字做特殊标记
代码:
public class PrintCount {
/**
* 统计数组(int[])中每个数字出现的次数
*/
public static void main(String[] args) {
int[] arr={ 1, 3, 3,8,9};
for(int i=0;i<arr.length;i++){
int count=1;
for(int j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
count++;
//将比较过的数字做特殊标记
arr[j]=999;
}
}
if(arr[i]!=999){
System.out.println(arr[i]+"出现了"+count);
}
}
}
}