程序逻辑与算法3_嘘嘘喵

嘘嘘喵 社区会员 2021-09-28 21:22:55

9.28

工作内容

任务4.2.4 和数分解

要求:把一个数分解成任意几个数的和,并把所有的可能性都列出来。

package com.xxm.task4;

import java.util.Scanner;
//要求:录入一个整数,输出其和式的所有可能性

public class FenJie {
    //第一步,定义工具数组,用于存放数据 //本来写在上面,但是个声明应该在主方法中完成,从逻辑上来说,它是第一步
    static int arr[] = new int[99999];  //定义工具数组,以用来存放数据。
    static Scanner sc = new Scanner(System.in);
    static int number;

    //第二步,主方法,录入数据
    public static void main(String[] args) {
        System.out.println("请输入一个正整数:");
        number = sc.nextInt();
        fenJie(number, 1, 0);    //初始条件要设成1和0
    }

    //第三步,直接定义和数分解的方法。
    private static void fenJie(int num, int a, int b) {
        /*
        3个变量的含义:
        num:待分解的数字(在最外层迭代,num就是录入的数字)
        a : 计数器,没有用i是因为等会的for循环中要用到i
        b : num数字的一个加数
         */

        if (num > 0) {
            for (int i = a; i <= num; i++) {    //循环条件,i初始为a,意为分解的第一个和数为a(初始时a=0)
                arr[b] = i; //存放和数
                fenJie(num - i, i, b + 1);  //递归。
                // 语句的作用是:在num分解为i与(num-i)的和之后,把(num-i)作为下一次迭代的待分解数据使用。
            }
            return;
        }
        //至此,递归构造完毕,接下来是打印和数。
        System.out.print(number + "=" + arr[0]);
        for (int i = 1; i < b; i++) {
            System.out.print("+" + arr[i]);
        }
        System.out.println();   //换行,以输出下一组和数。
    }
}

 任务4.2.5 支付通知

张伟在超市买了一瓶快乐水和一些吃的,使用支付 APP 完成支付后,过了几秒,
APP 通知他已经支付成功。

代码如下:

package com.xxm.task4;
/*
要求:张伟在超市买了一瓶快乐水和一些吃的,使用支付 APP 完成支付后,过了几秒,APP 通知他已经支付成功
思路:1、用一个函数表示付款动作,当付款动作完成时,返回一个布尔值
2、用一个函数表示APP的提示动作,当接收到付款函数返回的布尔值时,延迟1秒打印相关的提示信息
    */

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class Quest2_5_Callback_Shopping {

    //主方法,调用payCheck方法
    public static void main(String[] args) {
        System.out.println("支付成功请按1");
        notice(payCheck());
    }

    //第一步,写付款动作函数
    public static boolean payCheck() {
        Scanner sc = new Scanner(System.in);
        int paidOrNot = sc.nextInt();
        if (paidOrNot == 1) {
            return true;
        } else {
            return false;
        }
    }

    //第二步,延迟函数
    public static void notice(boolean paidOrNot) {
        Timer timer = new Timer();
        if (!paidOrNot) {
            timer.schedule(new TimerTask() {
                               public void run() {
                                   System.out.println("支付失败,请重试");
                               }
                           }
                    , 1000);
            notice(payCheck());
        } else {
            timer.schedule(new TimerTask() {
                public void run() {
                    System.out.println("支付成功,谢谢惠顾");
                    timer.cancel();
                }
            }, 1000);
        }
    }
}

 

任务4.2.6  电影提醒

李雷周一在某某宝 APP 上买了两张周五晚上的电影票。在周五晚上电影即将放映的前一小时,APP 给他发来了观影通知。

代码如下,其中,为了测试方便,代码中的时间设置的是写完代码后的1分钟,并且测试成功。:

package com.xxm.task4;
/*
李雷周一在某某宝 APP 上买了两张周五晚上的电影票。在周五晚上电影即将放映
的前一小时,APP 给他发来了观影通知
 */
/*
思路:
1、通知方法
2、在特定时间调用通知方法
 */

import java.util.Calendar;
import java.util.Date;
import java.util.TimerTask;
import java.util.Timer;

public class Quest2_6_Callback_Movie {
    public static void main(String[] args) {
        Timer timer = new Timer();
        Calendar time = Calendar.getInstance();
        time.set(2021, Calendar.SEPTEMBER, 28, 19, 04);
        Date date = new Date();
        date = time.getTime();
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("您的电影还有1个小时开场");
                timer.cancel();
            }
        }, date);

    }
}

在代码中设定的时间(2021.9.28.19:04),输出了目标语句。

任务4.2.7 洗衣机

这是几个任务里最简单的,没什么好说的,代码如下。

package com.xxm.task4;

import java.util.Timer;
import java.util.TimerTask;

/*
韩梅梅周末在家休息,她把衣服丢到洗衣机里之后就去扫地、做饭去了,过了一会,
洗衣机就「嘀~嘀~」响几声通知她衣服已经洗好了
 */
public class Quest_2_7_WashingMachine {

    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask(){
            public void run(){
                System.out.println("嘀~嘀~");
                timer.cancel();
            }
        },1000*60*20);

    }
}

代码中设置的时间是20分钟。为了测试方便,测试的时候将时间改成了1秒,成功输出。

 

C1任务30

在 JavaScript 中以下,以下哪些变量名是非法的(会导致程序报错)?

答:1person会报错,数字开头。

var会报错,var是关键字

 

C1任务30-2

在 JavaScript 中,以下哪些变量名不建议使用?

答:1person和var不能用,上题已经说了。

$orderwera23和uiuiuqwer4_23aser2不建议使用,因为不能直观看出变量的含义。

 

C1任务31-1

要想以下 JavaScript 代码符合预期,空格处应该填什么 运算符?

答:输出大数,填!。

 

任务C31-2

要想以下 JavaScript 代码符合预期,空格处应该填什么?

答: ==

 

知识学习

回调

网上看到的解释都非常的绕口、晦涩。

其实回调大概就是,一个函数被当做另一个函数的参数使用,那么这个函数就可以叫做回调函数。

 

堆排序

步骤:

1、构造一个小顶堆,用比较各二叉树的方法(如果子节点数据比父节点小,就交换他们的位置,使父节点位置的数据是大者),使堆顶数字为最小值,然后将其取出。

2、再将剩下的数字构造成小顶堆,取出最小数字。

3、重复,直到取出所有数。这样就完成了升序的堆排序。降序同理,换成大顶堆即可。

Timer

在这一段话中 Timer timer = new Timer();

作用

创建一个计时器。

导入

java.util.Timer;

关联方法

schedule()

用法1:timer.schedule(TimerTask task,long delay)

参数:TimerTask是一个类,等会讲。

delay是延迟,单位为毫秒。

这种用法作用是:在delay延迟后,执行task。

用法2:timer.schedule(TimerTask, Date time)

作用:在指定时间time,执行task任务。如果time是过去的时间,那么该任务立即执行。

 

cancel()

如果调用者想要快速终止计时器的任务执行线程,则调用者应该调用计时器的cancel方法。timer.cancel;

 

TimerTask

作用

创建一个计时器任务。

导入

java.util.TimerTask;

关联方法

cancel()

终止该任务。

run()

该任务要执行的操作。

使用示例:

import java.util.Timer;
import java.util.TimerTask;

public class Demo1 {
    public static void main(String args[]){
        timer.schedule(new TimerTask{
                            public void run(){
                                System.out.println("HelloWorld!");
                            }  
                        }
                    ,1000);
    }
}

这段代码的功能为:在1000毫秒后,打印HelloWorld!至控制台。

Date

作用

表示特定的时刻,精度为毫秒。

导入

import java.util.Date;

当使用Date date = new Date();声明变量时,date记录的是当前时间。

关联方法

toString();

将此Date对象转化为一定格式的字符串。

例如sout(date.toString());可以将date所对应的时间打印出来。

 

Calendar类

作用

可以指定时间,可以获取日期数据的特定部分,比如小时,日。 或者在日期的这些部分加上或者减去值呢。功能比Date强大很多。

特别注意:Calendar是一个抽象类,无法直接new一个对象。

必须通过getInstance()方法来创建。如:Canlendar c = CanlendargetInstance();

导入

import java.util.Date;

关联方法

 

getInstance()

作用:获取当前时间。

set

作用:将对象设定为特定时间。

如:c.set(2021,9,28),即将c对象的时间设置为2021年9月28日。

add

作用:在对象的时间上增加一段时间。

例如:c.add(Calendar.DATE,10);就是在c对象的时间上加10天。同理,可以是负数,表示减10天。

Date与Calendar类相互转换

Calendar→Date

getTime方法。

如:date = c.getTime();

Date→Calendar

setTime方法。

如:c.setTime(date);

 

C1-javascript

声明变量

var

注释

//

 

明日计划

1、通过算法可视化网站工具,熟练掌握顺序查找、二分查找、插值查找这三种查找算法,理解分块查找、哈希查找这两种查找算法

2、用至少三种排序方法完成对数组[0,9,12,1,6,3,7,11]的排序

3、解释数据结构中堆和栈的区别

4、a=1,b=2,使用至少三种方法交换变量 a 和 b 的值

5、使用 for 循环求出 0~300 之间的奇数之和

...全文
168 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110

社区成员

发帖
与我相关
我的任务
社区描述
训练、训练、训练!
其他 其他
社区管理员
  • 实训001
  • 非鱼up
  • andy421
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

自律训练,自信挑战!

试试用AI创作助手写篇文章吧