Logo

郎哥编程

数组结构的应用

2019-12-11 999

本课用数组实现常用的算法,包括求最大值和最小值、查找、排序等。

案例1:从键盘接收5个数,求出其中的最大值和最小值。

在PbaseUnit12项目unit包下创建MaxSample类。代码如下:

/** 
* @Title: MaxSample.java 
* @Package unit 
* @Description: Java基础知识课程案例
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
import java.util.Scanner;
 
/** 
* @ClassName: MaxSample 
* @Description: 数组结构(数组结构的应用)案例1
* @author 编程训练营 
* @date 
* 
*/
 
public class MaxSample {
 
    /**
     * @Title: main
     * @Description:Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型
     * @throws
     */
 
    public static void main(String[] args) {
       // 声明长度为5的整型数组,存储用户输入的数值
       int num[] = new int[5];
       // 声明max存储最大值,声明min存储最小值
       int max, min, i;
       Scanner sc = new Scanner(System.in);
       System.out.println("请输入5个数:");
       // 用for循环输入5个数值并赋值给num数组中元素
       for (i = 0; i < 5; i++)
           num[i] = sc.nextInt();
       // 将数组的第一个元素赋值给max和min
       max = num[0];
       min = num[0];
       // 遍历数组元素
       for (i = 0; i < num.length; i++) {
           // max小于数组中的元素时,将数组元素赋值给max
           if (max < num[i])
              max = num[i];
           // min大于数组中的元素时,将数组元素赋值给min
           if (min > num[i])
              min = num[i];
       }
       System.out.printf("\n 最大数为:%d", max);
       System.out.printf("\n 最小数为:%d", min);
    }
 
}

程序结构分析

程序功能主要是演示在一维数组中如何求最大值和最小值。

求一个数组中的最大值和最小值,可以设置max和min两个变量,max存储最大值,min存储最小值。max和min被初始化为数组元素的第一个值。然后,遍历数组元素,将max和min与数组元素的每一个值进行比较,如果max小于当前遍历的数组元素,将当前数组元素赋值给max,同样,如果min大于当前遍历的数组元素,将当前数组元素赋值给min。

程序执行结果如下图所示:

image.png

案例2:建立一个同学通迅录,通过姓名查找电话。

在PbaseUnit12项目unit包下创建FindSample类。代码如下:

/** 
* @Title: FindSample.java 
* @Package unit 
* @Description:Java基础知识课程案例
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
import java.util.Scanner;
 
/** 
* @ClassName: FindSample 
* @Description: 数组结构(数组结构的应用)案例2
* @author 编程训练营 
* @date 
* 
*/
 
public class FindSample {
 
    /** 
    * @Title: main 
    * @Description:Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
        /**
              * 声明5行2列的二维数组
              * 行数组长度5表示能够存储5位同学的姓名及电话
              * 列数组长度2表示列数组有2个元素,分别是姓名及电话
              * 数组类型是String
        */
        String  phone[][] = new String[5][2];
        String  name;
        int  i;
        boolean bFind = false;
        Scanner sc = new Scanner(System.in);
        //phone.lenght为行数组的长度
        System.out.printf("请输入 %d 位同学的姓名及电话",phone.length);
        // 使用for循环,输入同学的姓名及电话
        for( i = 0; i <phone.length; i++ )
        {
           System.out.printf("\n 请输入第 %d 位同学的姓名:",i+1);
           //phone[i][0]为二维数组phone的第i行第0个元素
           phone[i][0] =  sc.next();
           System.out.printf("\n 请输入第 %d 位同学的电话:",i+1);
           //phone[i][1]为二维数组phone的第i行第1个元素
           phone[i][1] =  sc.next();
         
        }
        System.out.print("\n ***同学通讯录建立完成***");
        /**
         * 应用while循环实现通讯录的无限次查找
         * while循环的判断条件一直为真,该循环为无限循环
         * 用户输入"quit"命令退出循环
        */
        while(true)
        {
           System.out.printf(" \n 请输入同学的姓名,退出请输入quit:");
           name = sc.next();
           //判断用户是否输入了quit命令
           if( name.equals("quit") )
              break;
           //设置bFind变量为false
           bFind = false;
           //遍历phone数组元素,查找用户输入的同学姓名是否在数组中
           for( i = 0; i < phone.length; i++ )
           {
              /**
                 *判断用户输入的姓名是否和当前数组行数第0个元素的内容相等
                 *如果相等则退出循环
                 *String的equals方法用于判断与传入字符串是否相等
              */
              if( name.equals(phone[i][0]) )
              {
                  //设置bFind变量为true    
                  bFind = true;
                  break;
              }
           }
           if( bFind )
              System.out.printf("\n %s的电话为:%s",name,phone[i][1]);
           else
              System.out.printf("\n 在通讯录中没有查找到%s",name);
 
       }
    }
}

程序结构分析

程序功能主要是演示二维数组的赋值及查找使用方法。

程序要求建立一个同学通讯录,可以存储5位同学的姓名及电话,并能实现根据同学姓名查找该同学电话的功能。

根据程序功能描述,可以建立一个5行2列的二维数组,存储5位同学的姓名及电话。通过for循环建立通讯录,通讯录建立完成后,进入查找功能,查找功能通过while循环实现,while的判断条件一直为真,确保程序一直运行在查找状态,直到用户输入quit命令才跳出循环。

程序执行结果如下图所示:

image.png

案例3:冒泡排序算法的实现。

冒泡排序算法的原理是比较两个相邻的元素,将值大的元素和值小的元素进行交换。具体实现思路是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

在PbaseUnit12项目unit包下创建SortSample类。代码如下:

/** 
* @Title: SortSample.java 
* @Package unit 
* @Description: Java基础知识课程案例
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
import java.util.Scanner;
 
/** 
* @ClassName: SortSample 
* @Description: 数组结构(数组结构的应用)案例3
* @author 编程训练营 
* @date 
* 
*/
 
public class SortSample {
 
    /**
     * @Title: main
     * @Description:Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型
     * @throws
     */
 
    public static void main(String[] args) {
       /**
        * 声明长度为10的一维数组,
        * 存储待排序的数值 数组类型是int
        */
       int arr[] = new int[10];
       int i;
       Scanner sc = new Scanner(System.in);
       System.out.printf("请输入 %d 个整数", arr.length);
       // 使用for循环,接收用户输入的整数
       for (i = 0; i < arr.length; i++) {
           System.out.printf("\n 请输入第 %d 个整数:", i + 1);
           arr[i] = sc.nextInt();
 
       }
       System.out.print("\n ***开始排序***");
       /**
        * 控制排序趟数
        * 有多少个待排序的数值就扫描数组多少趟
        *  针对每个待排序数值都要和其它数值进行比较
        */
       for (i = 0; i < arr.length - 1; i++) {
           /**
            * 控制每一趟排序多少次
            * 每一趟排序都会把较大的数值移动到数组后面
            * 第i趟排序循环次数为数组长度减去已经排过序的i个元素
            * 如果第j个元素大于第j+1个元素,则交换
            */
           for (int j = 0; j < arr.length - 1 - i; j++) {
              if (arr[j] > arr[j + 1]) {
                  int temp = arr[j];
                  arr[j] = arr[j + 1];
                  arr[j + 1] = temp;
              }
           }
       }
       System.out.print("\n ***排序完成***\n");
       System.out.println("排序后的数组为:");
       for (i = 0; i < arr.length; i++) {
           System.out.print(arr[i] + ",");
       }
 
    }
 
}

程序结构分析

程序功能主要是演示冒泡排序算法。

程序声明一个整型数组,存储要待排序的数值,然后用for循环语句控制数组的扫描趟数,扫描趟数为待排序数组元素的个数减去1,在每趟扫描中,用for循环遍历待排序数组元素,并进行比较和位置交换,循环范围介于0到排序数组元素的个数减去1再减去外层循环当前执行的扫描趟数,因为i趟排序过程中,已经把i个较大的数交换到数组length-i的数组序号范围,无需再比较和交换。

程序执行结果如下图所示:

image.png

数组是基本的数据结构,应用数组结构和算法可以构成诸如堆栈、队列、矩阵等数据结构。数组在应用中,应特别注意数组不能越界,存储的元素数量不能超过数组的容量,建议遍历数组时,遍历条件应采用数组本身提供的length属性获取数组长度。通过数组元素下标存取数组元素时,应预先判断其下标不能超过数组的长度。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论