题目分析:注意输入以0结束。先创建一个数组长度为0的新数组,将新数组进行扩容,在依次将用户输入的数据传入新数组中,每传进一个数,数组就要进行一次扩容,将数据全部读取到新数组中之后,再将数组进行排序,排序完毕之后再依次遍历数组判断数据的个数
import java.util.*;
class test1{
public static void main(String[] args){
/*
思路一:数组长度不固定 读取数据 数组扩容 填入数据
数据填入之后进行排序,然后遍历数组依次判断数据的个数
思路二:计数排序的思想
*/
Scanner s=new Scanner(System.in);
int[] arr=new int[0];
System.out.print("请输入数字");
while(true){
int num=s.nextInt();//将输入的数据传入到num里面
if(num==0){
break;
}
if(num<1||num>100){
System.out.println("有非法数据!");
return;
}
arr=copyOf(arr,arr.length+1);//数组扩容,
arr[arr.length-1]=num;
}
//2.按照输出结果进行排序
insertSort(arr);
//3.输出连续相等的数字
show(arr);
}
public static int[] copyOf(int[] arr,int newlen){
int[] newArr=new int[newlen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
public static void insertSort(int[] arr){
for(int i=1;i<arr.length;i++){
for(int j=i;j>0&&arr[j-1]>arr[j];j--){
int temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
}
}
public static void show(int[] arr){
System.out.println(Arrays.toString(arr));
for(int i=0;i<arr.length;){
int count=1;
for(int j=i+1;j<arr.length;j++){
if(arr[j]==arr[i]){
count++;
}else{
break;
}
}
System.out.println(arr[i]+" occurs "+count+(count>1?" times":" time"));
i+=count;
}
}
}
题目分析:创建一个数组长度为10的数组,将10个数字依次传入数组,再创建一个数组长度为0的新数组,在新数组中查依次查找旧数组中的数据,若没有,先将新数组进行扩容,再将数据传入新数组
import java.util.*;
class test2{
public static void main(String[] args){
/*
思路一 f1()
在全部输入之后去重复
*/
f1();
}
public static void f1(){
//循环遍历数组进行赋值
Scanner s=new Scanner(System.in);
System.out.print("输入数据:");
int[] arr=new int[10];//创建数组,长度为10
for(int i=0;i<arr.length;i++){//遍历数组
arr[i]=s.nextInt();//数组的赋值,将用户输入的数据依次传入数组arr
}
//开始对已有的数据进行去重复
method1(arr);
}
public static void method1(int[] arr){
int [] newArr=new int[0];//创建一个新的数组newArr,假设长度为0
for(int i=0;i<arr.length;i++){//从角标0开始对原有的数组进行遍历
if(!contains(newArr,arr[i])){//contain函数传newArr 在newArr中查arr 如果没有,那么先对数组进行扩容
newArr=copyOf(newArr,newArr.length+1);
newArr[newArr.length-1]=arr[i];//将i放进新数组中
}
}
System.out.println(Arrays.toString(newArr));
}
public static boolean contains(int[] newArr,int key){
for(int i=0;i<newArr.length;i++){
if(newArr[i]==key){
return true;
}
}
return false;
}
public static int[] copyOf(int[] arr,int newlen){
int[] newArr=new int[newlen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
}
题目分析:排好序的条件是,不能出现左边数字大于右边数字,我们可以从这一点入手,如果出现左边数字大于右边数字,则没有排好序,反之排好序
import java.util.*;
class test3{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("输入数组");
int len=s.nextInt();//获取的第一个数值为个数
int[] arr=new int[len];//获取的数组长度为len
for(int i=0;i<arr.length;i++){//数组中的数从角标0开始
arr[i]=s.nextInt();//表示从角标0开始,依次将输入的数字放到数组里
}
//对数组进行有序的判断
if(isSorted(arr)){
System.out.println("这个数组已排序");
}else{
System.out.println("该数组没有排序好");
}
}
public static boolean isSorted(int[] list){
//如果不是升序的势必会有左大右小
for(int i=1;i<list.length;i++){//角标从1,开始避免角标越界
if(list[i-1]>list[i]){
return false;
}
}
return true;
}
}