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

相关文章
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
26天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
26天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
22 2
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
1月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
44 9
|
1月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
22 3
|
1月前
|
Java 数据安全/隐私保护
JAVA经典习题详解
JAVA经典习题详解
17 4
|
1月前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
23 1
|
1月前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
14 1
|
1月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
35 0