主頁 > 前端設計 > 以面向物件的思維和軟體架構完成一道編程題目(Java)

以面向物件的思維和軟體架構完成一道編程題目(Java)

2020-10-12 15:43:35 前端設計

我是小康小白,一個平平無奇的Java小白,熱愛有趣的文字,生活和遠方,
個人博客:https://blog.csdn.net/weixin_45791445
有問題歡迎QQ聯系:1059320343 (記得備注CSDN)

在這里插入圖片描述
大家好呀,我康小白又來了,
在這里插入圖片描述

閑話不多說,讓我們開始正題,

一,題目:

1.1【問題描述】
撰寫一個幫助小學生練習數學的程式,幫助小學生練習100以內的四種數學運算:加、減、乘、除,
1.2【基本要求】
a) 程式應先詢問用戶的ID號(ID號包括兩個大寫字母和4位數字),例如:
請輸入用戶ID號:AB1234 程式應對輸入的ID號驗證,符合ID號要求的格式,然后程式提示三種選擇: (1)開始測驗 (2)檢查分數 (3)退出

b) 測驗:該程式將給出10道數學題,例如:
12 * 3 =36
48 + 32 =80
?
56 / 28 =2
注意:
i)學生將依次回答每一個問題(在等于號后面給出答案),然后給出下一道題,

ii)試題應包含四種數學運算:加、減、乘、除,它們是隨機產生的,相鄰的問題應該是不同的操作,每個操作必須至少出現一次,

iii)為每道題隨機生成數字,但必須確保參與運算的數字和結果都小于100且大于零的整數, iv)十道題做完后,記錄學生完成這十道題所用的時間,

v)給每個學生一個分數,將該學生的ID、成績和使用時間保存到一個名為record.txt的檔案中,

vi)在螢屏上輸出以下資訊:

問題 | 正確答案 | 你的答案

c) 成績檢查:從檔案“record.txt”中列出該學生的所有歷史成績,例如:
你以前的記錄是:
AB1234 80 150秒
AB1234 50 182秒
AB1234 90 98秒

二,注意點

這道題目不難,但如何在題目中體現我們Java的面向物件那?
君且聽我慢慢道來:

  1. 分析物件:
    首先題目的主體是什么:計算題,玩家
    那么就是兩物件;

  2. 分析物件屬性:

    1. 計算題(Operation):
      計算題有什么屬性呀?
      兩個引數,一個結果,一個運算子號;
      這是最基礎的屬性,可是這是就有個問題了,兩個運算的引數尚可以隨機生成,那運算的符號如何隨機生成呀?
      小白的想法是使用數字來代替符號,在物件類中添加相應的方法進行轉換,
      可這時小白又遇到了一個問題,小白原本的轉換是這樣寫的:
      在這里插入圖片描述
      設定一個String型別的屬性expression,通過方法轉化成對應的符號,
      可是在運算的時候小白發現了問題,我的這種方法可以進行輸出但不能進行運算,()
      于是小白想了一種解決方法:
      在這里插入圖片描述
      設定了String型別的expression變數用來輸出運算式,
      設定了float型別的result來記錄正確結果,

      這里使用的是switch case陳述句,在這種判斷中會比多重if回圈快

      后面為了進行對比,小白還設定了一個float型別的playerResult來存盤每道題玩家的運算結果,
      所以運算式(Operation)的所有屬性有:
      在這里插入圖片描述
      為了講存盤式轉換為String形式,還需要重寫物件的toString()方法
      在這里插入圖片描述

      1. 玩家(Player)
        基礎屬性:玩家ID,玩家的總成績,玩家的所用時間,玩家最后的運算式以及自己的答案和正確答案
        在這里插入圖片描述
        為了計算玩家得分,還需要寫一個方法
        在這里插入圖片描述
        為了實作對玩家成績的輸入,需要重寫物件的toStirng()方法
        在這里插入圖片描述
        為了輸出用戶所有的題目資訊,還需要寫一個方法
        在這里插入圖片描述
        由于operationsToString是一個ArrayList集合,所以使用for回圈輸出比迭代器要快,迭代器更適合類似于LinkList的輸出,
  3. 上面就是Java面向物件思想的集中體現:
    遇到專案(上面的這道題目就可以簡單理解為一個簡單的小專案)時,思考其中一共有多少物件,且首先分析這些物件基礎的屬性有什么,(就像上文的玩家物件基礎屬性只有玩家ID,玩家總成績,玩家所用時間),然后在做專案的程序中分析為了完成專案還需要多少屬性(就像上文的玩家物件中有個ArrayList型別的屬性operationsToString----指的是玩家最后的運算式以及自己的答案和正確答案,為什么要將玩家最后的運算式以及自己的答案和正確答案作為一個單獨的屬性添加到玩家物件中?),
    當然還有很重要的一點是所有的屬性都應當是私有(private)的,只能通過get和set方法實作對屬性的訪問,這也就是Java三大特性中的封裝,封裝提高了代碼的安全性降低了代碼的耦合度,方便了模塊的多次呼叫,

那么如何在題目中體現基礎的軟體架構?

我下面使用的就是一種軟體架構—三層架構

  1. 三層架構
    這是百度的結果 在這里插入圖片描述

    表現層(UI)(web層)
    業務邏輯層(BLL)(service層)
    資料訪問層(DAL)(dao層)
    再加上物體類別庫(Model)
    在這里插入圖片描述
    src目錄下有三個包,dao , model , service , web
    dao 包中原本應當是存放對資料庫的訪問,即對資料庫的增刪改查,這里由于題目中要求使用的是創建txt檔案來存盤資訊,所以里面類的方法實作了對txt的存盤和存出,還有一些是專案中需要使l用的基礎方法,(具體代碼請查看文章末尾的所有代碼)
    model中存放的是物體類,一般是與資料庫中的資料表相對應,
    service包中的類起連接作用,將UI表示層與DAL資料訪問層之間聯系起來,他們就是處理涉及業務邏輯相關的問題,比如在呼叫訪問資料庫之前,先處理資料、判斷資料,
    web層存放的是用戶看到的主界面,由于本題目沒有對界面的要求,所以這里小白沒有寫內容,

  2. 在完成一個專案時要完善對各種情況的思考,以及處理,
    例如題目要求中要求只讀出該學生的歷史成績那么就應當考慮到檔案中可能會存在其它學生的歷史成績,
    那么就需要在讀取成績時添加一個判斷
    我的代碼實作是這樣的
    在這里插入圖片描述

3. 實作了上面文章中的兩點便實作了面向物件思維和軟體架構的小實踐,

三,補充

為什么要將玩家最后的運算式以及自己的答案和正確答案作為一個單獨的屬性添加到玩家物件中?

因為為了實作一個玩家對應所有他在這次測驗中完成的題目的自己的答案和正確答案,之前

軟體架構和設計思維有什么區別?
設計是架構的實作之一,

四,代碼

dao包中
—WorkDomeDao類

package dao;

import model.Operation;
import model.Player;

import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/**
 * @author kangzhijie
 * @date 2020/10/10 10:56
 */
public class WorkDemoDao {



    //隨機生成數字去進行運算,但運算的型別由輸入的symbol確定
    public Operation randomGenerate(int symbol, Player player) {
        Random random = new Random();
        int x = random.nextInt(100);
        int y = random.nextInt(100);
        while (x == 0) {
            x = random.nextInt(100);
        }
        while (y == 0) {
            y = random.nextInt(100);
        }

        Operation operation = new Operation(x, y, symbol);
        //呼叫方法來創建運算式
        operation.matchingSymbol();

        //獲得運算式
        System.out.print(operation.getExpression() + "=");

        //要求用戶去輸入自己的答案
        try {
            Scanner scanner = new Scanner(System.in);
            operation.setPlayerResult(scanner.nextFloat());
        } catch (Exception e){
            System.out.println("提示:每次運算的結果只需要精確到小數點后一位即可,且無需四舍五入");
            System.out.println("請再次輸入你的答案");
            Scanner scanner1 = new Scanner(System.in);
            operation.setPlayerResult(scanner1.nextFloat());
        }

        //計算總分
        player.countScore(operation);

        //將這次的運算添加到List集合中
        player.getOperationsToString().add(operation.toString());

        return operation;
    }

    //游戲的主體,player是玩家物件
    public void mainBody(Player player) {

        System.out.println("提示:每次運算的結果只需要精確到小數點后一位即可,且無需四舍五入");

        //在每次開始游戲之前重置當前用戶物件的成績和使用時間
        player.setScore(0);
        player.setTime(0);
        ArrayList<String> arrayList = new ArrayList<>();
        player.setOperationsToString(arrayList);


        Random random = new Random();
        WorkDemoDao workDemo = new WorkDemoDao();
        long startTime = System.currentTimeMillis();
        for (int i = 0; i <= 3; i++) {
            workDemo.randomGenerate(i, player);
        }

        //設定個節點保證每一次的新操作與上次不同
        int symbolLast = 3;


        for (int j = 0; j < 7; j++) {
            int symbol = random.nextInt(3);
            while (symbol == symbolLast) {
                symbol = random.nextInt(3);
            }
            symbolLast = symbol;
            workDemo.randomGenerate(symbol, player);
        }
        long endTime = System.currentTimeMillis();
        long time = (endTime - startTime) / 1000;
        player.setTime(time);

        workDemo.inputSource(player);
    }

    //判斷輸入ID是否符合要求
    public Boolean judgeId(String id) {
        int judge1 = 1;
        int judge2 = 1;

        String strEnglish = id.substring(0, 2);
//        System.out.println(strEnglish);
        String strNumber = id.substring(2, 6);
//        System.out.println(strNumber);

        //判斷字串是否都為大寫
        char data1[] = strEnglish.toCharArray();
        for (char value : data1) {
            if (value > '0' && value < '9') {
                judge1 = 0;
            }
            if (Character.isLowerCase(value)) {
                judge1 = 0;
            }
        }


        //判斷字串是否都為數字
        char data2[] = strNumber.toCharArray();
        for (char c : data2) {
            if (c < '0' || c > '9') {
                judge2 = 0;
            }
        }

        return judge1 != 1 || judge2 != 1;


    }

    //判斷ID的格式
    public String inputID() {
        Boolean judge;
        Scanner scanner = new Scanner(System.in);
        WorkDemoDao workDemo = new WorkDemoDao();

        System.out.println("提示:玩家ID應該由兩位大寫英語字母加四位數字組成");
        System.out.print("請輸入玩家的ID:");
        String id = scanner.next();
        if (id.length() == 6) {
            judge = workDemo.judgeId(id);
        } else {
            judge = true;
        }

        if (judge) {
            while (judge) {
                System.out.println("ID不符合格式");
                System.out.println("提示:玩家ID應該由兩位大寫英語字母加四位數字組成");
                System.out.print("請重新輸入您的ID:");
                id = scanner.next();
                if (id.length() == 6) {
                    judge = workDemo.judgeId(id);
                } else {
                    judge = true;
                }
            }
        }
        return id;
    }

    //向檔案中寫入玩家的資訊
    public void inputSource(Player player) {
        File file = new File("D:\\record.txt");
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            //FileWriter構造方法中添加的true確保了Java檔案寫入是向檔案末尾添加而不是覆寫原檔案
            FileWriter fileWriter = new FileWriter("D:\\record.txt", true);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(player.toString() + "\n");
            bufferedWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //查詢檔案獲取資訊
    public void outputScoreLast(Player player) {
        File file = new File("D:\\record.txt");

        //使用ArrayList來存盤每行讀取到的字串
        ArrayList<String> arrayList = new ArrayList<>();

        if (!file.exists() && !file.isDirectory()) {
            System.out.println("您尚未進行游戲,請先進行游戲后查詢分數!");
        } else {
            System.out.println("您之前的記錄是:");
            try {
                RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
                //按行讀取字串
                String str = null;
                while ((str = randomAccessFile.readLine()) != null) {
                    //判斷是否為當前用戶ID
                    String[] middle = str.split("  ");
                    if (middle[0].equals(player.getId())) {
                        arrayList.add(str + "秒");
                    }
                }
                randomAccessFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if (arrayList.size() != 0) {
            for (String s : arrayList) {
                System.out.println(s);
            }
        } else {
            System.out.println("您還未進行測驗,請至少測驗一次后,查詢成績");
        }

    }


    //選擇代碼的主體
    public void switchCase(Player player) throws IOException {
        Scanner scanner = new Scanner(System.in);

        WorkDemoDao workDemo = new WorkDemoDao();
        System.out.println("歡迎玩家" + player.getId());
        boolean middle = true;
        while (middle) {
            System.out.println("請選擇您要進行的操作:");
            System.out.println("-----(1)開始測驗-----");
            System.out.println("-----(2)檢查分數-----");
            System.out.println("-----(3)退出-----");
            int i = scanner.nextInt();
            switch (i) {
                case 1:
                    workDemo.mainBody(player);
                    player.inputExpression();
                    System.out.println(player.getId() + "的成績是" + player.getScore());
                    break;
                case 2:
                    workDemo.outputScoreLast(player);
                    break;
                case 3:
                    middle = false;
                    break;
                default:
                    System.out.println("無效操作,請重新輸入");
                    break;
            }
        }
        System.out.println("已成功退出");

    }
}

model包

—Operation類
—Player類

package model;

/**
 * @author kangzhijie
 * @date 2020/9/27 10:19
 */
public class Operation {

    //運算變數一
    private int x;

    //運算變數二
    private int y;

    //運算子號
    private int symbol;

    //正確結果
    private float result;

    //算式的運算式
    private String expression;

    //玩家輸入的答案
    private float playerResult;

    public Operation() {

    }

    public Operation(int x, int y, int symbol) {
        this.x = x;
        this.y = y;
        this.symbol = symbol;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getSymbol() {
        return symbol;
    }

    public void setSymbol(int symbol) {
        this.symbol = symbol;
    }

    public float getResult() {
        return result;
    }

    public void setResult(float result) {
        this.result = result;
    }

    public String getExpression() {
        return expression;
    }

    public void setExpression(String expression) {
        this.expression = expression;
    }

    public float getPlayerResult() {
        return playerResult;
    }

    public void setPlayerResult(float playerResult) {
        this.playerResult = playerResult;
    }

    public void matchingSymbol() {
        switch (symbol) {
            case 0:
                result = x + y;
                expression = x + "+" + y;
                break;
            case 1:
                result = x - y;
                expression = x + "-" + y;
                break;
            case 2:
                result = x * y;
                expression = x + "*" + y;
                break;
            case 3:
                result = x / y;
                expression = x + "/" + y;
                break;
            default:
                System.out.println("無此型別");
                break;
        }
    }



    @Override
    public String toString() {
        return expression + " | " + result + " | " + playerResult;
    }
}

package model;

import java.util.ArrayList;
import java.util.List;

/**
 * @author kangzhijie
 * @date 2020/9/27 11:30
 */
public class Player {

    //玩家id
    private String id;

    //玩家總成績
    private int score;

    //玩家所用時間
    private long time;

    //玩家最后的運算式以及自己的答案和正確答案
    private ArrayList<String> operationsToString = new ArrayList<>();


    public Player() {
    }

    public Player(String id) {
        this.id = id;
    }

    public Player(String id, int score, long time, ArrayList<String> operationsToString) {
        this.id = id;
        this.score = score;
        this.time = time;
        this.operationsToString = operationsToString;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }

    public List<String> getOperationsToString() {
        return operationsToString;
    }

    public void setOperationsToString(ArrayList<String> operationsToString) {
        this.operationsToString = operationsToString;
    }

    //計算得分
    public void countScore(Operation operation) {
        if (operation.getPlayerResult() == operation.getResult()) {
            this.score += 10;
        }
    }

    //輸出用戶所有的題目資訊
    public void inputExpression() {
        System.out.println("問題 | 正確答案 | 你的答案");
        for (int i = 0; i < operationsToString.size(); i++) {
            System.out.println(operationsToString.get(i));
        }
    }

    @Override
    public String toString() {
        return id + "  " + score + "  " + time;
    }


}

service包
—WorkDemo類

package service;

import dao.WorkDemoDao;
import model.Player;

import java.io.IOException;

/**
 * @author kangzhijie
 * @date 2020/9/27 8:21
 */
public class WorkDemo {



    public static void main(String[] args) throws IOException {

        WorkDemoDao workDemo = new WorkDemoDao();

        System.out.println("開始測驗");
        //獲取正確的id作為id
        String id = workDemo.inputID();
        //創建玩家物件
        Player player = new Player(id);
        //開始選擇操作
        workDemo.switchCase(player);

    }


}

web包

以上就是代碼原始碼,如有問題和疑惑,以及想要代碼的包的歡迎聯系小白,


小白寫博客不容易,希望各位兄弟們,點贊評論收藏加關注,小白在此謝謝各位老爺們,
在這里插入圖片描述
對于白嫖的兄弟們
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/169132.html

標籤:其他

上一篇:在圖上發送訊息的神經網路MPNN簡介和代碼實作

下一篇:OpenCV:讀取與寫入圖片

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more