Java基础——【习题三】数组练习题

简介: Java基础——【习题三】数组练习题

【习题三】数组练习题


1、定义一个数组来存储12个学生的成绩{72,89,65,58,87,91,53,82,71,93,76,68},计算并输出学生的平均成绩。

package t3;
public class TestArray1{
  public static void main(String[]args){
  int []a={72,89,65,58,87,91,53,82,71,93,76,68};//显示初始化数组a,将学生成绩存到数组
  double sum;//为了平均成绩的精确,定义成绩的和为double类型
  sum=0;
  for(int i=0;i<a.length;i++){
    sum=sum+a[i];
  }
  System.out.println("学生成绩的平均数是:"+sum/a.length);//打印平均成绩
  }
}

image.png

2、定义一个数组来存储12个学生的成绩{72,89,65,58,87,91,53,82,71,93,76,68},统计各成绩等级(90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为E)学生人数,并将其放入到数组count中,其中:count[0]存E级的人数,count[1]存D级的人数,……,count[4]存A级的人数。


//90以上 count[4]++


//80~89  count[3]++


//70~79  count[2]++


//60~69  count[1]++


//60以下 count[0]++


package t3;
public class TestArray2{
  public static void main(String[]args){
  int []a={72,89,65,58,87,91,53,82,71,93,76,68};//显示初始化数组a,将学生成绩存到数组
  int []count=new int[5];//定义一个数组存储成绩每等级个数
  for(int i=0;i<a.length;i++){//遍历数组a
    if(a[i]>=90){//if else语句分级,并将个数存到对应空间中
    count[4]++;
    }else if(a[i]>=80){
    count[3]++;
    }else if(a[i]>=70){
    count[2]++;
    }else if(a[i]>=60){
    count[1]++;
    }else{
    count[0]++;
    }
    /*
    if(score[i]>=60){//归纳出简便方法
    count[score[i]/10-5]++;
    }else{
    count[0]++; 
    }
    */
  }
  System.out.print("A等级\tB等级\tC等级\tD等级\tE等级\t");
  System.out.println();
  for(int j=count.length-1;j>=0;j--){//从后往前遍历count
    System.out.print("  "+count[j]+"\t");
  }
  }
}

image.png

3、从键盘输入8个整数存放在一个数组中,然后将奇数和偶数分别存入到两个不同的数组中,并按奇数、偶数交替的顺序输出这两个数组中的所有数据(先交替输出,如果奇数个数多,则再输出剩下的奇数,如果偶数个数多,则再输出剩下的偶数)。(提示与要求:(1)定义一个数组存储从键盘输入的8个整数,先判断这8个整数中奇数和偶数的个数,才能定义存储奇数和偶数的数组的长度;(2)把一个大的数组分别存放在奇数和偶数数组中并交替输出的过程定义为方法)


package t3;
import java.util.Scanner;
public class TestArray3{
  public static void main(String []args){
  Scanner sc=new Scanner(System.in);//读入数据
  int a[]=new int[8];
  System.out.print("请输入8个数:");
  for(int i=0;i<a.length;i++){
   a[i]=sc.nextInt();
  }
  Array(a); //调用函数Array()
  }
  public static void Array(int[]num){
   int []oddNum;//奇数数组  
         int []evenNum;//偶数数组  
        int evenCount=0;
  int oddCount=0;  
        for (int i = 0; i < num.length; i++) {  
            if(num[i]%2==0){  
                evenCount++;  
            }else{  
                oddCount++;  
            }  
        }//循环结束已经统计出了num数组中偶数的个数为evenCount,奇数的个数为oddCount  
        oddNum=new int[oddCount];  
        evenNum=new int[evenCount];  
        int e=0,o=0;  
        for (int i = 0; i < num.length; i++){  
            if(num[i]%2==0){  
                evenNum[e]=num[i];  
                e++;  
            }else{  
                oddNum[o]=num[i];  
                o++;  
            }  
        }//此时已经将数组num按照奇数、偶数分拣到两个数组oddNum,evenNum中
  if(evenNum.length>oddNum.length){//如果偶数个数较多  
            for(int i=0;i<=oddNum.length-1;i++){  
                System.out.print(oddNum[i]+" "+evenNum[i]+" ");  
            }//先按照奇数的个数交替输出  
            for(int i=oddNum.length;i<=evenNum.length-1;i++){  
                System.out.print(evenNum[i]+" ");  
            }//输出剩下的偶数  
        }else{  
            for(int i=0;i<=evenNum.length-1;i++){  
                System.out.print(oddNum[i]+" "+evenNum[i]+" ");  
            }//先按照偶数的个数交替输出  
            for(int i=evenNum.length;i<=oddNum.length-1;i++){  
                System.out.print(oddNum[i]+" ");  
            }//输出剩下的奇数  
        }  
  }
  }

image.png


4、实现如下的排序算法:有一种简单的排序方法叫计数排序法,这种排序算法对一个待排序的数组进行排序,并将排序结果放到另一个新的数组中。计数排序算法针对待排序数组中的每个数据,扫描待排序的数组一趟,统计待排序数组中有多少个数据的值比该数据的值小。假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序数组中的合适的存放位置即为c。


程序框架如下,补充完整:


public class CountSort


{


public static void countSort(int n[])//对数组n进行计数排序的方法


{


int m[]=new int[n.length];//定义排序后的数组m


int count[]=new int[n.length];//记录数组n中某个数据在数组m中的位置


/*

image.png



*/


……………………..


………………………


………………………


…………………….


for(int i=0;i<m.length;i++)//输出排序后的数组


{


System.out.print(m[i]+" ");


}


System.out.println();


}


public static void main(String[] args)


{


int a[]={7,4,0,6,2,5,1};


CountSort.countSort(a);


}


}

package t3;
public class  CountSort {  
    public static int[] countSort(int a[]){  
        int m[]=new int[a.length];//数组m用来存放有序的数据序列  
        int count[]=new int[a.length];//数组count用来存放比数组a中每个元素小的数据的个数,count[0]存放比a[0]小的数据的个数,count[1]存放比a[1]小的数据的个数...  
        /*  
        for(int i=0;i<=a.length-1;i++){            
            for(int j=0;j<=a.length-1;j++){                
                if(j!=i&&a[j]<a[i]){  
                    count[i]++;       
                }  
            }  
        }  
        */  
        for(int i=0;i<=a.length-1;i++){            
            for(int j=i+1;j<=a.length-1;j++){                  
                if(a[j]<=a[i]){  
                    count[i]++;       
                }else{  
                    count[j]++;  
                }  
            }  
        }  
        /*  
        for (int i = 0; i < count.length; i++) {  
            System.out.print(count[i]+" ");  
        }  
        System.out.println();  
        */  
        for (int i = 0; i < count.length; i++) {  
            m[count[i]]=a[i];  
        }  
        return m;  
    }  
    public static void main(String[] args) {  
        int num[]={7,4,0,6,2,5,1};  
        int sortNum[]=countSort(num);  
        System.out.println("排好序的数组为:");  
        for (int i = 0; i < sortNum.length; i++) {  
            System.out.print(sortNum[i]+" ");  
        }  
    }  
}

image.png


5、编写顺序查找的方法public static int[] ordinalSearch(int data[],int key),要求该方法返回一个数组(如果key存在,数组中各元素的值分别为关键字key在原数组data中的各下标;如果key不存在,则返回一个长度为1的数组,数组元素为-1)。【基本过程:(1)先扫描数组data,统计数组中key的个数n;(2)如果n为0,直接返回一个数组元素为-1的数组;否则的话定义一个数组int index[]=new int[n],再扫描数组data,把数组中值为key的各个元素的下标保存到数组index中,最后返回数组index】

package t3;
public class TestArray5 {
    public static int[] ordinalSearch(int data[],int key){  
        int n=0;  
        for (int i = 0; i < data.length; i++) {  
            if(data[i]==key){  
                n++;  
            }  
        }//已经知道数组data中有n个key  
        if(n==0){  
            int index[]={-1};  
            return index;  
        }else{  
            int index[]=new int[n];  
            int j=0;  
            for (int i = 0; i < data.length; i++) {  
                if(data[i]==key){  
                    index[j]=i;  
                    j++;  
                }  
            }//把key存在于数组data中的各下标存入数组index  
            return index;  
        }  
    }  
    public static void main(String[] args) {  
        int a[]={7,4,0,6,2,5,1,1,6,0,6,7};  
        int index[]=ordinalSearch(a, 6);  
        for (int i = 0; i < index.length; i++) {  
            System.out.print(index[i]+" ");  
        }  
    }  
}

image.png

6、编写一个方法public static int[][] dyadicArraySort(int a[][]),能够实现对一个二维数组a进行升序排列,要求整个二维数组中最小的值为a[0][0],然后依次是a[0][1],a[0][2]….,a[1][0],a[1][1]…..,使用一个无序的二维数组对你编写的方法进行检验。(基本思想:在方法体中,先将二维数组转换为一个一维数组,然后对一维数组进行排序,排好序后再将一维数组中的各个元素依次搬到二维数组中)


package t3;
import java.util.Arrays;    
public class TestArray6 {  
    public static int[][] dyadicArraySort(int a[][]){  
        int n=0;  
        for (int i = 0; i < a.length; i++) {  
            for (int j = 0; j < a[i].length; j++) {                
                n++;  
            }  
        }//二维数组中数据的个数  
        int b[]=new int[n];  
        int k=0;  
        for (int i = 0; i < a.length; i++) {  
            for (int j = 0; j < a[i].length; j++) {                
                b[k]=a[i][j];  
                k++;  
            }  
        }//二维数组的各元素移到一维数组b
        Arrays.sort(b);//对一维数组b进行升序排列  
        k=0;  
        for (int i = 0; i < a.length; i++) {  
            for (int j = 0; j < a[i].length; j++) {                
                a[i][j]=b[k];  
                k++;  
            }  
        }//一维数组b中元素放回二维数组中  
        return a;  
    }  
    public static void main(String[] args) {  
        int n[][]={{8,7,10},  
                    {9,1},  
                    {15,0,-3,16}};  
        output(n);  
        dyadicArraySort(n);  
        output(n);  
    }  
    public static void output(int a[][]){  
        for (int i = 0; i < a.length; i++) {  
            for (int j = 0; j < a[i].length; j++) {                
                System.out.print(a[i][j]+" ");  
            }  
            System.out.println();  
        }  
        System.out.println("-----------------");  
    }  
}

image.png

相关文章
|
4月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
3月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
5月前
|
存储 Java 索引
java 数组
在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。
165 0
|
9月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
685 1
Java 中数组Array和列表List的转换
|
7月前
|
存储 人工智能 Java
打乱数组内容引发的问题( Java)
本文介绍了两种实现数组随机打乱的方法,并深入探讨了Java中原始数据类型与对象类型的差异。方法一通过自定义随机数交换数组元素位置,方法二借助`Collections.shuffle()`函数完成数组打乱。同时,文章详细解析了`int`和`Integer`的区别,包括声明方式、内存占用、初始化以及对象特性等,并讲解了自动装箱与拆箱的功能,帮助读者更好地理解Java的基础知识。
140 0
|
9月前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
221 23
|
9月前
|
存储 Java 索引
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
141 2
|
8月前
|
存储 Java 数据挖掘
Java 中数组的多种定义方式
本文深入解析了Java中数组的多种定义方式,涵盖基础的`new`关键字创建、直接初始化、动态初始化,到多维数组、`Arrays.fill()`方法以及集合类转换为数组等高级用法。通过理论与实践结合的方式,探讨了每种定义方法的适用场景、优缺点及其背后的原理,帮助开发者掌握高效、灵活的数组操作技巧,从而编写更优质的Java代码。
438 0
|
11月前
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
885 12