精华内容
下载资源
问答
  • 一、按数值排序var arr ...其实是数组依次将数组元素复制给x,y,比如首先将arr[0]赋给x,arr[1]赋给y,然后用x[0] – y[0],根据返回的值,如果返回的是大于0的数,那么就把数组中x放到y的后面,如果返回的是0则不变...

    一、按数值排序

    var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];

    arr.sort(function(x, y){

    return x[0] – y[0];

    });

    其实是数组依次将数组元素复制给x,y,比如首先将arr[0]赋给x,arr[1]赋给y,然后用x[0] – y[0],根据返回的值,

    如果返回的是大于0的数,那么就把数组中x放到y的后面,

    如果返回的是0则不变,

    如果小于0则将x放到y的前面,

    然后第一个排序好之后在进行下面两个的排序,直到整个数组排序完成。

    这是默认升序的比较函数,如果要降序排列则只需修改比较方式,改为 return y[0] – x[0] 即可,

    这里我们x[0]表示是按第一列进行排序,我们这里也可以按其他列进行排序。这里的排序默认就会修改arr的数组结构,所以排序完arr就是按第一列升序的数组了。

    二、按字符串排序

    var arr = [['中','国'], ['啊','的'], ['哦','的']];

    arr.sort(function(x, y){

    return x[0].localeCompare(y[0]);

    });

    localeCompare作用:用本地特定的顺序来比较两个字符串。

    localeCompare方法的使用规则是stringObject.localeCompare(target),

    如果

    stringObject 小于 target,则 localeCompare() 返回小于 0 的数,将x放到y的前面,

    如果 stringObject 大于

    target,则该方法返回大于 0 的数,就把数组中x放到y的后面,。

    如果两个字符串相等,或根据本地排序规则没有区别,该方法返回

    0,则不变,

    其比较使用的是本地的规则,本地规则意思就是使用操作系统底层对这些本地字符排序的规则进行排序,默认情况下比如使用大于号这样的比较只是纯粹比较两个字符的unicode的数大小,会与很多语言不符。

    结果就会按第一列中文字的拼音排序,如果含有英文的话,默认是将英文放在前面,如果是纯英文的话,会按字母顺序来,大写排在小写的后面,这样就可以实现字符串的排序了,包括中文和中英混排。至于要降序排列的话,方法与上面相同,改成return y[0].localeCompare(x[0]); 即可。

    JS二维数组排序组合

    需求是这样的:http://q.cnblogs.com/q/29093/ 这里简述一下: 现在有一个不确定长度的数组.比如:var temp=[["Fu","Hai&qu ...

    JS 二维数组排序

    JS:二维数组排序和获取子级元素

    JS:二维数组排序和获取子级元素 1. 二维数组排序 1.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; 如果我们要按每个子数组的第一列来排序要如 ...

    PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)

    一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...

    一个不错的PHP二维数组排序函数简单易用存用

    一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...

    php实现二维数组排序array_multisort($ages, SORT_DESC, $home)函数

    1.sql查询排序参数是order by,那么php进行排序呢 可以参考array_multisrot函数 //php进行二维数组排序 -xzz1009 foreach($home as $home) ...

    PHP二维数组排序(list_order)

    /** * 对二维数组进行排序 * 模拟 数据表记录按字段排序 * * * @list_order($list, $get['orderKey'], $get['orderT ...

    php基础篇-二维数组排序 array_multisort

    原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...

    PHP二维数组排序(感谢滔哥)

    滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...

    随机推荐

    Node.js开发利器

    开发工具 WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢. 做些小型项目用Sublime Text. Browserify:将你 ...

    LR java Vuser 相关依赖JAR包,配置文件处置方法

    JAR包,配置文件依赖有两种处理方法 1.放到工程文件夹下(lr脚本目录),不支持负载机调用 2.F4  classpath设置加载jar包和配置文件的整个文件夹,麻烦些,但支持负载机调用(与http ...

    appStore上传苹果应用程序软件发布流程(之前都是同事发,复制一份备用)

    首先确定帐号是否能发布, https://developer.apple.com/account,如果你打开Provisioning Portal,然后点击DisTribution看到的是下图中那样, ...

    cryptopp开源库的使用(一):md5加密

    项目总是各种新需求,最近遇到需要对字符串进行md5加密,确保传输字符串的有效性. 考虑到跨平台性和通用性,选择了cryptopp开源库,这里主要是用静态库调用. 1.引入头文件和lib库 #inclu ...

    C# 汉子增加UTF-8头

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Conv ...

    C#access数据库操作

    比较凌乱,有时间在整理吧. Provider=Microsoft.Jet.OLEDB.!" private void GetCon() { string strConnection=&quo ...

    数学#扩展欧几里德 POJ 1061&2115&2891

    寒假做的题了,先贴那时写的代码. POJ 1061 #include #include typedef long long LL; usin ...

    ssh连接原理介绍( 无密码连接登录的原理)

    SSH(Secure  Shell)一种在不安全网络上提供安全远程登录及其它安全网络服务的协议.由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x.(SSH 2.x的客户程序是不能 ...

    两个序列求前k大和

    ---恢复内容开始--- 没有题目,没有题意,这是学长提过的一个技巧,给你两个排好序的序列,每次可以各从中取一个,求前k大的和, 一个优先队列,先将a序列中最大的那个和b序列所有元素相加存进队列中,每 ...

    How to add the ApplicationPoolIdentity to a SQL Server Login

    The ApplicationPoolIdentity is a virtual account in Windows that is dynamically generated when the a ...

    展开全文
  • PHP 判断二维数组中是否含有某个值

    千次阅读 2019-10-13 03:25:37
    主要是因为用mysqli_fetch_all() 这函数返回的数组是数字索引的二维数组,有时候我们需要判断一个主键是否在这个二维数组中就会遇到一些麻烦,常见的做法就是写循环判断,但是如果需要判断多次的情况下,我们循环...

    主要是因为用 mysqli_fetch_all() 这函数返回的数组是数字索引的二维数组,有时候我们需要判断一个主键是否在这个二维数组中就会遇到一些麻烦,常见的做法就是写循环判断,但是如果需要判断多次的情况下,我们循环这么多次会大大降低脚本的性能,我们应该要如何改进?思路就是把子数组中的键值作为数组索引,然后直接用 if 或者 array_key_exists() 就可以判断了。

    <?php
    
    //数据库就不创建了,直接代码模拟。
    
    $data = [
    
              0 =>  [
                        'id' => 5698,
                        'first_name' => 'Bill',
                        'last_name' => 'Gates',
                    ],
        
              1 =>  [
                        'id' => 4767,
                        'first_name' => 'Steve',
                        'last_name' => 'Jobs',
                    ],
    
               2 => [
                        'id' => 3809,
                        'first_name' => 'Mark',
                        'last_name' => 'Zuckerberg',
                    ],
    
        ];
    
    //我们用 mysqli_fetch_all() 函数以后肯定会得到类似这样的数值索引二维函数。子数组先以关联数组演示。
    
    //方法一
    
    $arr = [];
    
    foreach( $data as $key => $value){
        $arr[$data[$key]['id']] = $value; 
    }
    
    echo '<pre>';
        print_r($arr);
    echo '<pre/>';
    
    /*
    
    输出数组
    
    Array
    (
        [5698] => Array
            (
                [id] => 5698
                [first_name] => Bill
                [last_name] => Gates
            )
    
        [4767] => Array
            (
                [id] => 4767
                [first_name] => Steve
                [last_name] => Jobs
            )
    
        [3809] => Array
            (
                [id] => 3809
                [first_name] => Mark
                [last_name] => Zuckerberg
            )
    
    )
    
    输出以ID为索引的二维数组成功。
    
    */
    
    /*
    
    方法二
    
    利用 array_column() 函数
    
    该函数返回输入的多维数组中所有子数组中的某个索引的值组成的数组。
    输入的必须是多维数组(关联数组和索引数组都可以),不然返回数组为空数组。
    子数组中的索引可以是字符串索引也可以是数字索引。
    第二个参数也可以是 NULL,此时将返回子数组中所有元素(配合 index_key 参数来重置数组键的时候,非常有用)。
    第三个参数可以规定该子数组某个索引(键名)的键值成为返回数组中的键值对的键名。
    
    返回数组的键值为输入的多维数组中子数组中的某个键名的键值,返回数组的键名按以下规则
    1.如果有第三个参数,则按第三个参数规定的值。
    2.如果第三个参数为空,返回数组的键名则是以 0 开始 的数字索引。
    
    
    */
    
    
    $arr = [];
    
    $arr = array_column($data,null,'id');
    //第二个参数设置为null,这样返回数组的键值为子数组的所有元素。
    //第三个参数设置为id,这样返回数组的键名为子数组中id索引的键值。
    
    
    echo '<pre>';
        print_r($arr);
    echo '<pre/>';
    
    
    
    /*
    
    输出数组
    
    Array
    (
        [5698] => Array
            (
                [id] => 5698
                [first_name] => Bill
                [last_name] => Gates
            )
    
        [4767] => Array
            (
                [id] => 4767
                [first_name] => Steve
                [last_name] => Jobs
            )
    
        [3809] => Array
            (
                [id] => 3809
                [first_name] => Mark
                [last_name] => Zuckerberg
            )
    
    )
    
    输出以ID为索引的二维数组成功。
    
    */
    
    
    
    
    

    顺便测试了一下这两个方法的效率。

    <?php
    
    $data = [];
    
    for($n = 0;$n<100000;$n++)
    {
        $data [] =  [
            'id' => md5(uniqid(mt_rand(), true)), //生成唯一id
            'first_name' => 'Mark',
            'last_name' => 'Zuckerberg',
        ];
    }
    
    
    
    
    $t1 = microtime(true);
    
    foreach( $data as $key => $value){
        $arr[$data[$key]['id']] = $value;
    }
    
    
    //$arr = array_column($data,null,'id');
    
    
    $t2 = microtime(true);
    
    echo $t2-$t1; 
    
    /*
    
    数组的元素个数在五千时,这两个方法的执行效率一样,
    但是数组元素个数在一万时,下面的方法效率比上面方法的效率快了一倍左右。
    
    */
    
    
    
    

     

    展开全文
  • 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); print_r($arr1); // 得到的顺序是1,5,9 print_r($arr2); // 得到的顺序是6,4,2 我估计两个数组的值自始至终都是...

    一、先看最简单的情况。

    有两个数组:

    $arr1 = array(1, 9, 5);
    $arr2 = array(6, 2, 4);
    
    array_multisort($arr1, $arr2);
    
    print_r($arr1); // 得到的顺序是1,5,9
    print_r($arr2); // 得到的顺序是6,4,2

    我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。我们再加多一个数组看看会怎样:

    $arr1 = array(1, 9, 5);
    $arr2 = array(6, 2, 4);
    $arr3 = array(3, 7, 8);
    
    array_multisort($arr1, $arr2, $arr3);

    查看结果,1自始至终都对应6对应3,其它项也是如此。这种对应关系就是手册中所谓的“排序时保留原有的键名关联”。

    另外,也可以把每个数组想像成数据库表的一列。而对应着的1, 6, 3为一数据行,9, 2, 7为另一数据行,5, 4, 8 另一行。

    array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序。

    具体可以用下面的程式来测试:

    $arr1 = array(1, 9, 5, 9);
    $arr2 = array(6, 2, 4, 1);
    $arr3 = array(3, 7, 8, 0);
    
    array_multisort($arr1, $arr2, $arr3);

    可以想像这里$arr3的结果是(3, 8, 0, 7)。

     

    二、接下来讲解array_multisort的参数。

    这个函数的参数很灵活。最简单的情况是如上面所示的以1个或n个数组作为参数,需要注意的是每个数组的项数要一样,否则会warning导致排序失效。

    像这样array_multisort($arr1, $arr2, $arr3); 默认是所有数组都是升序排列,如果想对$arr2降序,并当作字符串去比较,就要写成:

    array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);

    每个array后面可以跟一个排序顺序标志或一个排序类型标志,或者两种标志同时出现。但是每种排序标志在每个数组后面只能出现一个。

    详细如下:

    排序顺序标志:

    • SORT_ASC - 按照上升顺序排序(默认)
    • SORT_DESC - 按照下降顺序排序

    排序类型标志:

    • SORT_REGULAR - 将项目按照通常方法比较(默认)
    • SORT_NUMERIC - 将项目按照数值比较
    • SORT_STRING - 将项目按照字符串比较

     

    三、最后是array_multisort有什么实际作用。

    我们通常有一些多维数组需要排序:

    $guys = array(
    	array(
    		'name' => 'jake',
    		'score' => 80,
    		'grade' => 'A'
    	),
    	array(
    		'name' => 'jin',
    		'score' => 70,
    		'grade' => 'A'
    	),
    	array(
    		'name' => 'john',
    		'score' => 80,
    		'grade' => 'A'
    	),
    	array(
    		'name' => 'ben',
    		'score' => 20,
    		'grade' => 'B'
    	)
    );

    例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。

    这时我们就需要根据$guys的顺序多弄两个数组出来:

    $scores = array(80, 70, 80, 20);
    $names = array('jake', 'jin', 'john', 'ben');

    然后

    array_multisort($scores, SORT_DESC, $names, $guys);

    就行了。

    还能不能更灵活一点呢,每次想排序都要另外弄些数组出来吗?

    其实可以经封装几个函数


    <?php
    /**
     * 根据指定的键对数组排序
     *
     * 用法:
     * <code>
     * $rows = array(
    		array('id' => 1, 'value' => '1-1', 'parent' => 1),
    		array('id' => 2, 'value' => '2-1', 'parent' => 1),
    		array('id' => 3, 'value' => '3-1', 'parent' => 1),
    		array('id' => 4, 'value' => '4-1', 'parent' => 2),
    		array('id' => 5, 'value' => '5-1', 'parent' => 2),
    		array('id' => 6, 'value' => '6-1', 'parent' => 3),
    	);
     *
     * $rows = list_orderByCol($rows, 'id', SORT_DESC);
     * dump($rows);
     * // 输出结果为:
     * // array(
     * // array('id' => 6, 'value' => '6-1', 'parent' => 3),
     * // array('id' => 5, 'value' => '5-1', 'parent' => 2),
     * // array('id' => 4, 'value' => '4-1', 'parent' => 2),
     * // array('id' => 3, 'value' => '3-1', 'parent' => 1),
     * // array('id' => 2, 'value' => '2-1', 'parent' => 1),
     * // array('id' => 1, 'value' => '1-1', 'parent' => 1),
     * // )
     * </code>
     *
     * @param array $array 要排序的数组
     * @param string $keyName 排序的键
     * @param int $dir 排序方向
     * @return array 排序后的数组
    */
    function list_orderByCol($array, $keyName, $dir = SORT_ASC)
    {
    	return list_orderByMultiCols($array, array($keyName => $dir));
    }
    
    /**
    * 将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY
    *
    * 用法:
    * <code>
    * $rows = list_orderByMultiCols($rows, array(
    	'parent' => SORT_ASC,
    	'name' => SORT_DESC,
    * ));
    * </code>
    *
    * @param array $rowset 要排序的数组/行集
    * @param array $args 排序的键
    *
    * @return array 排序后的数组
    */
    function list_orderByMultiCols($rowset, $args)
    {
    	$orderArray = array();
    	$orderRule = '';
    
    	foreach ($args as $orderField => $orderDir)
    	{
    		foreach ($rowset as $offset => $row)
    		{
    			$orderArray[$orderField][$offset] = $row[$orderField];
    		}
    		$orderRule .= '$orderArray[\'' . $orderField . '\'], ' . $orderDir . ', ';
    	}
    
    	if (empty($orderArray) || empty($orderRule))
    	{
    		return $rowset;
    	}
    	eval('array_multisort(' . $orderRule . '$rowset);');
    
    	return $rowset;
    }


    展开全文
  • 问题描述 解决思路  ...不过为了更好的理解程序,在观看代码时思路不会混乱,可以将第个switch-case语句包装成新的方法,在第一个语句中调用方法即可实现。     在程.
    1. 问题描述
      在这里插入图片描述
    2. 解决思路
          该问题模拟日常生活中快递柜取件问题。在程序中,有管理员和用户两个不同身份人员,能进行的操作也不同,为此可以使用switch-case语句进行判断然后进入不同的界面。而在管理员操作功能也有多个,可以再次使用switch-case语句,进行嵌套使用实现。不过为了更好的理解程序,在观看代码时思路不会混乱,可以将第二个switch-case语句包装成新的方法,在第一个语句中调用方法即可实现。
          在程序的设计中采用MVC框架(模型-视图-控制器),V-放置页面显示的所有内容,包括欢迎页面、退出页面、身份选择页面、功能选择页面等等;M-放置与数据库操作有关的方法,即增删改查方法,各个方法之间没有鲁逻辑连接,逻辑连接通过控制器实现;最后通过C-调用M和V中的各个方法,实现各个页面的显示和功能。
          使用MVC框架的好处:减少耦合性。各个页面的显示互不相关,增删改查的实现过程互不相关。在进行后期代码的修改,功能的添加删除等改动代码量大大减少。在进行代码的阅读时也能容易理解,每个功能模块可以单独理解,最后通过控制器的逻辑连接进行理解即可。
    3. 程序代码
      视图展示Views.java
    package com.vanessa.express;
    
    import java.util.Scanner;
    
    public class Views {
        Scanner input = new Scanner(System.in);
    
        /**
         * 欢迎页面
         */
        public void welcome(){
            System.out.println("欢迎使用胡萝卜小区快递管理系统!");
        }
        /**
         * 退出页面
         */
        public void byebye(){
            System.out.println("欢迎下次使用!");
        }
        /**
         * 身份选择页面
         * @return 0.退出 1.管理员 2.用户
         */
        public int menu(){
            System.out.println("请选择您的身份:0.退出 1.管理员 2.用户");
            String text = input.nextLine();
            int num = -1;
            try{
                num = Integer.parseInt(text);
            } catch (NumberFormatException e){ }
            if(0>num || 2<num){
                System.out.println("输入有误,请重新输入!");
                menu();
            }
            return num;
        }
    
        /**
         * 管理员功能选择页面
         * @return 0.退出  1.快递录入  2.删除快递  3.修改快递  4.查看所有快递
         */
        public int aMenu(){
            System.out.println("请选择您要执行的操作:0.返回上级目录  1.录入快递  2.删除快递  3.修改快递  4.查看所有快递");
            String text = input.nextLine();
            int num = -1;
            try{
                num = Integer.parseInt(text);
            } catch (NumberFormatException e){ }
            if(0>num || 4<num){
                System.out.println("输入有误,请重新输入!");
                aMenu();
            }
            return num;
        }
    
        /**
         * 用户取快递页面
         */
        public int uMenu(){
            System.out.print("请输入您的取件码进行取件:");
            String text = input.nextLine();
            int num = -1;
            try{
                num = Integer.parseInt(text);
            } catch (NumberFormatException e){ }
            if(100000>num || 9999999<num){
                System.out.println("输入有误,请重新输入!");
                uMenu();
            }
            return num;
        }
        /**
         * 录入快递页面
         * @return e
         */
        public Express insert(){
            System.out.print("请输入快递单号:");
            String code = input.nextLine();
            System.out.print("请输入快递公司:");
            String company = input.nextLine();
            Express e = new Express();
            e.setCode(code);
            e.setCompany(company);
            return e;
        }
    
        /**
         * 获取快递单号
         * @return 快递单号
         */
        public String findByCode(){
            System.out.print("请输入要操作的快递单号:");
            String code = input.nextLine();
            return code;
        }
    
        /**
         * 询问是否确认删除页面
         * @return 0.退出 1.确认删除 2.取消操作
         */
        public int delete(){
            System.out.println("是否确认删除? 0.退出 1.确认删除 2.取消操作");
            String text = input.nextLine();
            int num = -1;
            try{
                num = Integer.parseInt(text);
            } catch (NumberFormatException e){ }
            if(0>num || 2<num){
                System.out.println("输入有误,请重新输入!");
                delete();
            }
            return num;
        }
    
        /**
         * 修改快递单号页面
         * @return 修改后的快递
         */
        public Express update(Express e){
            System.out.print("请输入新的快递单号:");
            String newCode = input.nextLine();
            System.out.print("请输入新的快递公司:");
            String company = input.nextLine();
            e.setCode(newCode);
            e.setCompany(company);
            return e;
        }
    
        /**
         * 打印快递信息
         * @param e
         */
        public void printExpress(Express e) {
            if (e != null) {
                System.out.println("快递信息如下,快递公司:" + e.getCompany() + ",快递单号:" + e.getCode() + ",取件码:" + e.getNumber());
            }
        }
    
        /**
         * 打印所有快递信息
         * @param es
         */
        public void printAll(Express[][] es){
            if (es==null || es.length==0){
                System.out.println("快递系统中暂无快递");
                return;
            }
            for(int i=0;i<10;i++){
                for(int j=0;j<10;j++){
                    if (es[i][j] != null) {
                        System.out.print("第" + (i + 1) + "排" + (j + 1) + "列");
                        printExpress(es[i][j]);
                    }
                    //printExpress(es[i][j]);
                }
            }
        }
        /**
         * 删除快递成功页面
         */
        public void deleteSuccess(){
            System.out.println("已经成功删除快递!");
        }
        /**
         * 取件成功页面
         */
        public void successPickup(){
            System.out.println("成功取件!");
        }
        /**
         * 重复存储快递页面
         */
        public void expressExist(){
            System.out.println("此单号快递在快递柜中已经存在,请勿重复存储!");
        }
    
        /**
         * 对应单号快递不存在页面
         */
        public void expressNotExist(){
            System.out.println("快递柜不存在此单号快递,请重新输入!");
        }
    }
    

    数据存取
        Express.java表示快递,其中包含有关快递的相关属性:快递单号、快递公司和取件码已经相关get()、set()、toString()等方法。

    package com.vanessa.express;
    
    import java.util.Objects;
    
    public class Express {
        private String company; //快递公司
        private String code;    //快递单号
        private int number;     //取件码
    
        @Override
        public String toString() {
            return "Express{" +
                    "company='" + company + '\'' +
                    ", code=" + code +
                    ", number=" + number +
                    '}';
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Express)) return false;
            Express express = (Express) o;
            return Objects.equals(code, express.code);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(code);
        }
    
        public String getCompany() {
            return company;
        }
    
        public void setCompany(String company) {
            this.company = company;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public int getNumber() {
            return number;
        }
    
        public void setNumber(int number) {
            this.number = number;
        }
    }
    

        ExpressDao.java包含与数据库的操作方法,即增删改查(各个方法之间任何的逻辑,都是独立的)。

    package com.vanessa.express;
    
    import java.util.Random;
    
    public class ExpressDao {
        private Express[][] data = new Express[10][];
        private int size; //当前存储的快递数
        private Random random = new Random();
        {
            for (int i=0;i<10;i++){
                data[i] = new Express[10];
            }
        }
        /**
         * 存取快递
         * @param e
         * @return 存快递成功则返回true,没有位置则返回false
         */
        public boolean add(Express e){
            if (size == 100){
                return false;
            }
            int x = -1;
            int y = -1; //随机生成快递所在行和列
            while (true){
                x = random.nextInt(10);
                y = random.nextInt(10);
                if (data[x][y] == null){//此位置无快递
                    break;
                }
            }
            int number = randomNumber();
            e.setNumber(number); //设置快递的取件码
            data[x][y] = e;
            size++;
            return true;
        }
    
        /**
         * 随机生成取件码
         * @return 快递系统中不存在的取件码
         */
        public int randomNumber(){
            /*int number = random.nextInt(900000)+100000;
            Express e = findByNumber(number);
            if(e != null){
                randomCode();//取件码已经存在,重新分配取件码
            }
            return number;*/
            while (true){
                int number = random.nextInt(900000)+100000;
                Express e = findByNumber(number);
                if(e == null){
                    return number;//取件码不重复,可以直接使用
                }
            }
        }
    
        /**
         * 根据取件码查询快递
         * @param number 取件码
         * @return查询结果,查找到则返回快递信息,否则返回null
         */
        public Express findByNumber(int number){
            for (int i=0;i<10;i++){
                for (int j=0;j<10;j++){
                    if(data[i][j] != null) {
                        if (data[i][j].getNumber() == number) {
                            return data[i][j];
                        }
                    }
                }
            }
            return null;
        }
    
        /**
         * 根据单号查询快递
         * @param code 单号
         * @return查询结果,查找到则返回快递信息,否则返回null
         */
        public Express findByCode(String code){
            Express e = new Express();
            e.setCode(code);
            for (int i=0;i<10;i++){
                for (int j=0;j<10;j++){
                    if (e.equals(data[i][j])){
                        return data[i][j];
                    }
                }
            }
            return null;
        }
    
        /**
         * 删除快递
         * @param e 需要删除的快递
         */
        public void delete(Express e){
            d:for (int i=0;i<10;i++){
                for (int j=0;j<10;j++){
                    if (e.equals(data[i][j])){
                        data[i][j] =null;
                        size--;
                        break d;
                    }
                }
            }
        }
    
        /**
         * 修改快递单号,思路:将要修改的快递删除,再将单号修改后重新添加
         * @param oldE
         * @param newE
         */
        public void update(Express oldE,Express newE){
            delete(oldE);
            add(newE);
        }
    
        /**
         * 查询所有快递信息
         * @return 将每一个快递信息
         */
        public Express[][] all(){
            return data;
        }
    }
    

    调度数据Main.java
        用于将V和M联系起来的内容。通过用户的数字输入,跳转到不同的页面并实现相应的功能。

    package com.vanessa.express;
    
    public class Main {
        private static Views v = new Views();
        private static ExpressDao d = new ExpressDao();
        public static void main(String[] args) {
            v.welcome();
            w:while (true) {
                int menu = v.menu();
                switch (menu) {
                    case 0:
                        break w;
                    case 1:
                        administrator();
                        break;
                    case 2:
                        user();
                        break;
                }
            }
            v.byebye();
        }
    
        /**
         * 用户各个功能实现
         */
        private static void user() {
            boolean b = true;
            while (b) {
                int number = v.uMenu();
                Express e = d.findByNumber(number);
                if (e == null) {
                    v.expressNotExist();
                    b = true;
                } else {
                    v.printExpress(e);
                    v.successPickup();
                    d.delete(e);//取件成功后将该快递从快递柜中删除
                    b = false;
                }
            }
        }
    
        /**
         * 管理员各个功能实现
         */
        private static void administrator() {
            while (true){
                int menu = v.aMenu();
                switch (menu){
                    case 0: return;//返回上一层
                    case 1: {//录入快递
                        Express e1 = v.insert();
                        Express e2 = d.findByCode(e1.getCode());//通过快递单号判断该快递是否已经存在
                        if (e2 == null){
                            d.add(e1);
                            v.printExpress(e1);
                        } else {//该单号快递已经存在快递柜中
                            v.expressExist();
                        }
                    }
                    break;
                    case 2: {//删除快递
                        boolean b = true;
                        while (b) {
                            String code = v.findByCode();//获取快递单号
                            Express e = d.findByCode(code);//在快递数组中通过快递单号查找快递
                            if (e == null) {//不存在该单号快递
                                v.expressNotExist();
                                b = true;
                            } else {
                                v.printExpress(e);
                                int type = v.delete();
                                if (type == 1) {
                                    d.delete(e);
                                    v.deleteSuccess();
                                }
                                b = false;
                            }
                        }
                        /*Express e = d.findByCode(code);
                        if (e == null){
                            v.expressNotExist();
                        } else {
                            v.printExpress(e);
                            int type = v.delete();
                            if (type == 1) {
                                d.delete(e);
                                v.deleteSuccess();
                            }
                        }*/
                    }
                    break;
                    case 3: {//修改快递
                        boolean b = true;
                        while (b) {
                            String code = v.findByCode();
                            Express e = d.findByCode(code);
                            if (e == null) {
                                v.expressNotExist();
                                b = true;
                            } else {
                                v.update(e);//调用该方法修改快递单号和快递公司
                                v.printExpress(e);
                                b = false;
                            }
                        }
                    }
                    break;
                    case 4: {//查看所有快递
                        Express[][] data = d.all();
                        v.printAll(data);
                    }
                    break;
                }
            }
      
    
    1. 遇到的问题
      (1)空指针问题
          问题描述:当快递为空时,调用get方法获取数据进行条件判断时出错。在这里插入图片描述    解决方法:在进行if前添加语句if(data[i][j] !=null)进行判断,可使进入判断语句中的data[i][j]均不为空。
      在这里插入图片描述
          问题描述:在135行代码中,当快递为空时,调用get方法出现。
      在这里插入图片描述
          解决方法:先判断再进行输出。
      在这里插入图片描述
      (2)逻辑问题
          问题描述:在进行删除快递操作时,如果输入单号错误,进入了修改单号操作。
      在这里插入图片描述

        原因:break放在整个操作里面,在中括号之中判断语句未执行到break无法退出,直接进行到下一个case,即修改快递单号的操作中。
        解决方法:将break移至中括号外,待case执行完所有语句后执行。
    在这里插入图片描述
    5. 进一步完善
        在进行取件操作时,如果输入的取件码是错误的,会返回至身份选择页面,想要实现:当输入取件码错误后,输出提示信息并重新让用户输入取件码。
    在这里插入图片描述
        在删除快递操作时,快递信息不存在时返回至上一层。
    在这里插入图片描述
        在修改快递操作时,快递信息不存在时返回至上一层。
    在这里插入图片描述
        以上使用while循环语句进行即可,创建boolean变量继续判断是否进行下一次循环,如果输入错误,则将boolean变量赋值为true使其进入下一次循环;如果输入正确,则将boolean变量赋值为false,退出循环。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    6. 小总结
        通过该实验的学习过程,对于Java编程规范有了更深的理解,编程的习惯也更规范化。代码仍存在一定的不完善之处,大家共同进步!

    展开全文
  • 1.数据库里面原始数据,大家可以看到两列中其实是乱的。那么我想将他按顺序进行排序怎么做呢volume | edition-------+--------67 | 286 | 185 | 698 | 286 | 667 | 7 2.php 查出来或模拟的数据$data[] = array('...
  • 1~4维数组的动态构建实例

    千次阅读 2011-04-14 15:39:00
    1~4维数组的动态构建实例 一维  #include  #include  int main()  {  int n1,i;  int *array;  puts("输入一维长度:");  scanf("%d",&n1);  array=(int*)malloc(n1*sizeof(int));//第一...
  • 我们一般从第三方数据提供方(接口提供者)获取到的数据格式都是json格式,而最常见的是二维关联性数组,如: //php写法, $man=array("id"=>9,"name"=>"张三丰",“age”=>"99"); 或者: $man["id"]=9; ...
  • 数组/内存原理/冒泡排序/笔试题
  • 这个代码比较简单,只能做单表多条件查询,插入数据并检查符合数据字典,删除,修改等功能。还有很多功能没有完成,如建立,更新索引,多表查询查询优化等。 #include<stdio.h> #include<iostream> ...
  • 一:首先准备html查询页面 &lt;!DOCTYPE html&gt; &lt;html&gt; &...学生成绩查询&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;
  • tp5 volist输出数据库查询出来的数据

    千次阅读 2019-07-25 10:06:08
    自己编写了使用tp5 用来显示数据库查询出来的数据,第一次编写 控制器里面的编写: public function ppxx() { $Ppxx=new Ppxxm; $data=$Ppxx->select(); //$data=$Ppxx->find(); //var_dump($data); ....
  • C数组

    千次阅读 2016-12-31 13:25:43
    数组的目的:数组是一种非常常用的存储数据的结构,大部分语言都提供了数组这种存储结构[数组不是非常重要,比较重要] 存储结构:变量 数组 链表 数组的优点: 存取速度快 数组的缺点: 需要一整块连续的空间[对于庞大的...
  • 3.1 数组

    2021-04-10 14:13:47
    3.1 数组 本章主要是介绍数组和字符串,两个都可以用来保存大量的数据。其中字符串可以视作一种特殊的字符数组,并且由于其特殊性,会...通常,我们在c++中用这样的方式定义一个一维数组(通常!毕竟我比较fw) #inlcud
  • 数组是具有相同名字的一组变量,数组中包含多个元素,由不同的下标值区分数组的各个元素。...定义一个一维数组mmArray(3) Dim mmArray(3) mmArray(0)=1 mmArray(1)=3 mmArray(2)=5 mmArray(3)=7
  • 利用计算机模拟仿真各类信息管理系统,学习、体验信息组织与管理技术,可以大大提升统计数据模拟技能,为高效开发实际管理系统、提高统计数据处理能力奠定坚实基础。 1、学生注册信息数据库结构 模拟目标: 5000名...
  • 从上篇的文章代码就可以看出来,如果php数组仅仅采用键值对的方式进行存储,通过很简单的方式转换为json格式,之后在android客户端进行交互的时候通过JSONObject 也很快通过键值对的方式取到数据。但是,有时候我们...
  • 使用数组存储数据,常常允许用一个脚本查询数组中是否有某一个值(可能验证用户输入到文本框中的数据是否是可接受的)。另外,在查找匹配的项时,脚本可以在另一个数组中查找一些相关的信息。完成这个任务的 一种...
  • 第五单元数组

    2019-12-24 23:55:08
    数组就是一组相同类型的变量,他们往往都是为了表示同一批对象的统一属性,数组可以是一维的,也可以是二维或多维的。在数学中,可以用hi(1<=i<=50)表示第i个同学的身高,i为编号。在C++中,使用一维数组时,...
  • 1. 多维数据库简介多维数据库(Multi Dimesional Database,MDD)可以简单地理解为:将数据存放在一个n维数组中,而不是像关系数据库那样以记录的形式存放。因此它存在大量稀疏矩阵,人们可以通过多维视图来观察数据...
  • PHP数组

    2018-06-12 01:28:00
    一、数组初步 ①概念:数组是一种数据的集合,数组主要是用于存储具有行列特征(表格)的数据 ②PHP数组的分类 索引数组数组的下标是整数 关联数组数组的下标是字符串 ③PHP数组的创建 php中数组...
  • 中文名C语言动态数组释义相对于静态数组而言根据随程序需要而重新指定大小定义声明时没有确定数组大小的数组C语言动态数组词目释义编辑动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中...
  • js数组

    2020-03-18 20:24:40
    数组概念 所谓的数组,就是数据的集合 基本数据类型 : 在变量中只能存储一个单元的数据; 数组,是数据的集合,可以存储多个单元的数据,所以它也属于复杂数据类型 数组的创建方式 数组的创建方法有两种: 1.字面量...
  • 根据数组的内容,生成页面中的table表格 ...基本都是二维数组形式 html部分是 <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> ...
  • C语言基础教程(4)数组和函数

    千次阅读 2018-09-13 12:22:33
    数组 数组的使用: 为什么需要数组 1:为了解决大量同类型数据的存储和使用问题。 2:用数组可以模拟现实世界。 Int a[25]:一维数组,可以当做一个线性结构。 Int a[8][6]:可以当做一个平面,...一维数组...
  • 多维数据库介绍

    千次阅读 2014-05-13 08:58:41
    多维数据库(Multi Dimesional Database,MDD)可以简单地理解为:将数据存放在一个n维数组中,而不是像关系数据库那样以记录的形式存放。因此它存在大量稀疏矩阵,人们可以通过多维视图来观察数据。多维数据库增加了...
  • 编写一个程序模拟图书管理系统。用户分为管理员和读者两类,分别显示不同文本格式菜单,通过菜单项对应数字进行选择。读者菜单包括借书、还书、查询等功能。管理员菜单包括图书和读者信息录入、修改和删除。图书信息...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,815
精华内容 3,126
关键字:

二维数组模拟数据库查询