學習日志04 java

PTA上的練習復盤

java01 編程題作業感悟:

可以用ai指導自己怎么調試,但是不要把調代碼這過程里面的精華交給ai,就是自己去修正錯誤不能讓ai代勞!~~~

1 scanner.close()

Scanner *** = new Scanner(System.in);

***.close();

---------------------------------------------------------------------------------------------------------------------------------

所以后面真的要close的是這個***哦,以前我都會把***寫成scanner,還以為所有都是用scanner關閉?!

***表示我自己取的一個變量名

2 其實同scanner輸入的變量類型可以一起定義

前面我寫的是Scanner sc = new Scanner(System.in);

int a = sc.nextInt();

int b = sc.nextInt();

其實也可以寫成

int a = sc.nextInt(),b = sc.nextInt();

3 調試打印方法

例如第一道編程題目里面的——————————————————————————————

調試語句 System.out.println("當前i=" + i + ", sum=" + sum);

4?case?標簽的值不需要連續,也不需要按順序排列。它們可以是任意離散的值

常見誤區對比

? 錯誤認知
// 誤以為 case 必須連續(如 1, 2, 3...)
switch (num) {case 1:  // 正確case 2:  // 正確case 3:  // 正確case 5:  // ? 誤以為不允許“跳過”4printf("Number is 1-3 or 5");break;
}
? 正確寫法
// case 值可以是任意離散值
switch (num) {case 1:    // 允許case 10:   // 允許case 100:  // 允許printf("Number is 1, 10, or 100");break;case 5:    // 位置隨意,不影響邏輯printf("Number is 5");break;
}

關鍵點

  1. 值的獨立性:每個?case?標簽只需要與?switch?表達式的類型兼容(如整數、枚舉、字符串等)。
  2. 順序無關性case?標簽的順序不影響匹配邏輯,匹配是通過值直接跳轉的。
  3. 合并規則:連續的?case?標簽(無代碼間隔)會共享同一個執行塊。

5 直觀感受自己的不足吧,對比解法!

好的,我將對比分析你的代碼與最優雅解法之間的差異,幫助你理解如何優化代碼結構和邏輯表達:

你的原始代碼(優化后)

java

public class Demo1_2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int limit = scanner.nextInt(),speed = scanner.nextInt();switch (test(limit, speed)) {case 0:System.out.println("Congratulations, you are within the speed limit!");break;case 1:System.out.println("You are speeding and your fine is 100.");break;case 2:System.out.println("You are speeding and your fine is 270.");break;case 3:System.out.println("You are speeding and your fine is 500.");break;}scanner.close();}//我想用switch case語句來實現,需要怎么做?/*一個樸素的想法就是將不同的類型對應其規定為case*/public static int test(int a , int b){int fine = 0;int c =b-a;if(c>= 1&&c<= 20){fine =1;}else if(c>= 21&&c<= 30){fine =2;}else if(c>=31){fine =3;}return fine;}

最優雅解法的核心邏輯

java

int overSpeed = actualSpeed - speedLimit;
if (overSpeed <= 0) {System.out.println("未超速");
} else if (overSpeed <= 20) {System.out.println("罰款100");
} else if (overSpeed <= 30) {System.out.println("罰款270");
} else {System.out.println("罰款500");
}

對比分析

  1. 函數封裝 vs 直接處理

    • 你的代碼:將邏輯封裝在獨立函數中,通過返回值(0-3)間接映射罰款金額。這種設計提高了代碼復用性,但增加了函數調用的復雜度。
    • 優雅解法:直接在?main?方法中處理邏輯,減少了函數調用層級,代碼更扁平化。
  2. 條件判斷的簡潔性

    • 你的代碼:使用?c >= 1 && c <= 20?等多條件組合,覆蓋每個區間的邊界值。
    • 優雅解法:利用條件的互斥性,通過?overSpeed <= 20?→?overSpeed <= 30?→ 否則 的順序,隱式覆蓋邊界值,減少了條件復雜度。
  3. 邊界值處理

    • 你的代碼:顯式包含邊界值(如?c >= 21 && c <= 30),邏輯更嚴謹但代碼稍冗長。
    • 優雅解法:通過條件順序(如先判斷?<=20?再判斷?<=30)隱式處理邊界,代碼更簡潔。
  4. 變量命名

    • 你的代碼:使用?abc?作為參數和中間變量,語義不明確。
    • 優雅解法:使用?speedLimitactualSpeedoverSpeed,代碼可讀性更高。

優雅解法的優勢

  1. 更少的抽象層次:避免了額外的函數封裝和返回值映射,直接輸出結果,符合 “最小化抽象” 原則。
  2. 自然的條件順序:利用條件的互斥性,按數值范圍從小到大判斷,邏輯更直觀。
  3. 更清晰的變量命名:直接反映業務含義(限速、實際速度、超速值),減少理解成本。

你的代碼的優勢

  1. 可復用性:獨立的?test?函數便于在其他場景中復用。
  2. 擴展性:若后續需要增加更多罰款等級,你的代碼結構更易于擴展(只需修改函數內部邏輯)。

總結建議

=========================================================================

  • 優先選擇簡潔性:對于簡單問題(如本題),直接在?main?方法中處理邏輯更符合 “KISS 原則”(保持簡單愚蠢)。
  • 權衡復用性:若邏輯可能在多處使用,封裝成獨立函數更合理。
  • 優化變量命名:使用有明確語義的變量名(如?overSpeed)提升可讀性。
  • 簡化條件判斷:利用條件的互斥性,通過順序判斷隱式處理邊界值。

6?在java里面我要輸入多組數據,每組數據進行一樣的處理,在這個輸入的代碼塊要怎么寫?

在 Java 中,處理多組輸入數據并對每組數據進行相同操作時,你可以使用循環結合 Scanner 類來實現。以下是幾種常見的實現方式:

1. 已知輸入組數

如果題目明確告訴你有多少組數據,可以先讀取組數,再用循環處理每組數據:

java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 讀取數據組數for (int i = 0; i < n; i++) {// 讀取每組數據(示例:讀取兩個整數)int a = scanner.nextInt();int b = scanner.nextInt();// 處理數據(示例:輸出兩數之和)System.out.println(a + b);}scanner.close();}
}

2. 未知輸入組數,以特定條件結束(如輸入 0 結束)

如果題目沒有明確告訴你有多少組數據,但指定了結束條件,可以使用 while 循環:

java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (true) {int a = scanner.nextInt();int b = scanner.nextInt();// 判斷是否為結束條件(示例:a和b都為0時結束)if (a == 0 && b == 0) {break;}// 處理數據System.out.println(a + b);}scanner.close();}
}

3. 未知輸入組數,以文件結束符(EOF)結束

在控制臺中,Windows 用戶可以按 Ctrl+Z,Linux/Mac 用戶可以按 Ctrl+D 來模擬 EOF:

java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int a = scanner.nextInt();int b = scanner.nextInt();// 處理數據System.out.println(a + b);}scanner.close();}
}

4. 每行包含多個數據,處理整行

如果每行包含多個數據,并且需要將整行作為一個字符串處理,可以使用?scanner.nextLine()

java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextLine()) {String line = scanner.nextLine();// 處理整行數據(示例:分割字符串并求和)String[] parts = line.split(" ");int sum = 0;for (String part : parts) {sum += Integer.parseInt(part);}System.out.println(sum);}scanner.close();}
}

關鍵說明:

  • Scanner 類:用于從標準輸入(控制臺)讀取數據。
  • 循環結構:根據題目要求選擇?for?循環(已知組數)或?while?循環(未知組數)。
  • 結束條件:通過判斷特定值(如 0)或文件結束符(EOF)來終止循環。
  • 數據讀取:使用?nextInt()nextLine()?等方法讀取不同類型的數據。

7?hasNextline是什么用法?(前面提到的)

在 Java 中,Scanner.hasNextLine()?是?Scanner?類的一個方法,用于檢查輸入源中是否還有下一行數據可讀。它通常與?Scanner.nextLine()?方法結合使用,用于逐行讀取文本輸入。

基本用法

hasNextLine()?返回一個布爾值:

  • true如果輸入源中還有下一行(即使是空白行)
  • false:如果輸入源已結束(例如,用戶按下了?Ctrl+D(Linux/Mac)或?Ctrl+Z(Windows))。
示例 1:逐行讀取輸入

java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 循環讀取每一行,直到輸入結束while (scanner.hasNextLine()) {String line = scanner.nextLine();  // 讀取整行文本System.out.println("你輸入的是:" + line);}scanner.close();}
}

運行效果

輸入:Hello World
輸出:你輸入的是:Hello World
輸入:Java is cool
輸出:你輸入的是:Java is cool
(用戶按 Ctrl+D 結束輸入)

與其他方法的區別

  1. hasNextLine()?vs?hasNext()

    • hasNextLine():檢查是否還有下一行(無論行內是否有內容)。
    • hasNext():檢查是否還有下一個標記(默認以空格分隔)。

    java

    // 輸入:Hello World\nJava is cool
    scanner.hasNext();     // true(下一個標記是 "Hello")
    scanner.hasNextLine(); // true(下一行是 "Hello World")
    
  2. nextLine()?vs?next()

    • nextLine():讀取一整行(包括換行符),返回的字符串不含換行符。
    • next():讀取下一個標記(遇到空格、制表符或換行符停止)。

常見場景

場景 1:處理多行輸入

java

// 輸入:
// 1 2 3
// 4 5 6
// 7 8 9Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {String line = scanner.nextLine();String[] numbers = line.split(" ");for (String num : numbers) {System.out.println(Integer.parseInt(num));}
}
場景 2:跳過空行

java

while (scanner.hasNextLine()) {String line = scanner.nextLine();if (!line.isEmpty()) {  // 忽略空行System.out.println("處理:" + line);}
}

注意事項

  1. 避免混用?nextLine()?和其他?nextXxx()?方法

    java

    // 錯誤示例:
    int num = scanner.nextInt();  // 讀取整數后,換行符仍留在緩沖區
    String line = scanner.nextLine();  // 直接讀取了剩余的換行符,導致跳過輸入// 正確做法:
    int num = scanner.nextInt();
    scanner.nextLine();  // 手動消耗掉換行符
    String line = scanner.nextLine();
    
  2. 輸入結束條件

    • 在控制臺中,用戶需要手動觸發結束(Ctrl+D?或?Ctrl+Z)。
    • 如果從文件讀取,文件結束時?hasNextLine()?自動返回?false

總結

hasNextLine()?是逐行讀取輸入的關鍵方法,適用于:

  • 處理多行文本(如文件內容、多行輸入)。
  • 需要整行處理的場景(如字符串分割、正則匹配)。
  • 配合?while?循環實現連續讀取,直到輸入結束。

?8 最大公約數的算法思路

GCD(最大公約數)是指能夠同時整除兩個數的最大正整數。計算 GCD 最常用的方法是歐幾里得算法(輾轉相除法),其核心思想是:

對于兩個數 a 和 b(a > b),它們的 GCD 等于 b 和 a% b 的 GCD,遞歸或迭代這個過程直到余數為 0。

歐幾里得算法步驟:

  1. 用較大數除以較小數,得到余數。
  2. 用較小數除以余數,得到新的余數。
  3. 重復步驟 2,直到余數為 0。此時的除數就是 GCD。
示例:計算 GCD (48, 18)
  • 48 ÷ 18 = 2 余 12 → GCD (48, 18) = GCD (18, 12)
  • 18 ÷ 12 = 1 余 6 → GCD (18, 12) = GCD (12, 6)
  • 12 ÷ 6 = 2 余 0 → GCD (12, 6) = 6
  • 最終結果:GCD (48, 18) = 6

代碼實現(Java):

java

// 方法1:遞歸實現
public static int gcd(int a, int b) {if (b == 0) {return a;}return gcd(b, a % b);
}// 方法2:迭代實現(更高效)
public static int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;
}

關鍵點:

  • 遞歸邏輯gcd(a, b) = gcd(b, a % b),直到b為 0。
  • 迭代邏輯:用臨時變量存儲中間值,不斷更新ab直到余數為 0。

9 有關最大公約數最小公倍數的代碼修正歷程?

關鍵改進點

  1. 移除冗余的首行讀取

    java

    // 刪除了循環前的這兩行
    // int x = scanner.nextInt();
    // int y = scanner.nextInt();
    
  2. 使用?trim()?處理首尾空格

trim是java里面很好的內置方法哦~~!

  1. java

    String line = scanner.nextLine().trim();
    
  2. 空行檢查

    java

    if (line.isEmpty()) continue;
    

10 對比我的修正代碼和優雅代碼,感受進步

以下是一個更簡潔優雅的標準答案,我會標注與你代碼的主要區別:

優雅版代碼

import java.util.Scanner;public class Demo1_3 {public static void main(String[] args) {try (Scanner scanner = new Scanner(System.in)) { // try-with-resources自動關閉資源while (scanner.hasNextLine()) {String[] parts = scanner.nextLine().trim().split("\\s+"); // 使用\s+處理多個空格int a = Integer.parseInt(parts[0]);int b = Integer.parseInt(parts[1]);System.out.printf("%d %d%n", gcd(a, b), lcm(a, b)); // 格式化輸出}} catch (Exception e) {System.err.println("輸入格式錯誤: " + e.getMessage()); // 異常處理}}// 使用遞歸實現GCD (更簡潔)public static int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}public static int lcm(int a, int b) {return Math.abs(a * b) / gcd(a, b); // 處理負數情況}
}

我的代碼

import java.util.Arrays;
import java.util.Scanner;
public class {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextLine()) {String line = scanner.nextLine().trim();  // 讀取整行并去除首尾空格if (line.isEmpty()) continue; // 跳過空行//System.out.println("讀取的行: " + line);// 分割輸入的兩個整數String[] parts = line.split(" ");int a = Integer.parseInt(parts[0]);int b = Integer.parseInt(parts[1]);//System.out.println("分割后的部分: " + Arrays.toString(parts));// 計算GCD和LCMint gcdResult = gcd(a, b);int lcmResult = lcm(a, b);// 輸出結果System.out.println(gcdResult + " " + lcmResult);}}public static int lcm(int a, int b){// 先除后乘避免溢出return a / gcd(a, b) * b;}public static int gcd(int a,int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}
}

與你代碼的主要區別

特性你的代碼優雅版代碼
資源管理手動調用scanner.close()使用try-with-resources自動關閉
空格處理split(" ")split("\\s+")(處理多個空格)
GCD 實現迭代循環遞歸(更簡潔)
異常處理捕獲輸入格式錯誤
輸出格式字符串拼接printf格式化輸出
負數處理未處理Math.abs()處理負數

關鍵優化點解釋

  1. 資源自動關閉

    java

    try (Scanner scanner = new Scanner(System.in)) {// 代碼塊結束時自動關閉scanner
    }
    
  2. 正則表達式處理空格

    java

    split("\\s+") // 匹配任意數量的空白字符(空格、制表符等)
    
  3. 遞歸 GCD

    java

    public static int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
    }
    
  4. 格式化輸出

    java

    System.out.printf("%d %d%n", gcd, lcm); // 更清晰的輸出控制
    
  5. 異常處理

    java

    catch (Exception e) {System.err.println("輸入格式錯誤: " + e.getMessage());
    }
    

總結

你的代碼已經正確實現了核心功能,而優雅版代碼主要在以下方面進行了提升:

  1. 代碼簡潔性:遞歸、正則表達式減少了代碼量
  2. 健壯性:異常處理和資源管理更完善
  3. 可讀性printf和方法設計更符合 Java 風格

在實際開發中,建議優先考慮代碼的健壯性和可維護性,而不是一味追求簡潔。你的實現已經很好,這些優化點可以作為未來的參考!

謝謝ai的點評,/(ㄒoㄒ)/~~,感覺就是這樣才能進步啊!!!加油!今天先寫到這里啦~明天繼續加油~!~!~!~!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79564.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI 在模仿歷史語言方面面臨挑戰:大型語言模型在生成歷史風格文本時的困境與研究進展

概述 在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;技術在諸多領域展現出了強大的能力&#xff0c;但在處理歷史語言這一特定任務時&#xff0c;卻遭遇了不小的挑戰。美國和加拿大的研究人員通過合作發現&#xff0c;像 ChatGPT 這樣的大型語言模型&#x…

基于 Spring Boot 瑞吉外賣系統開發(十二)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;十二&#xff09; 菜品刪除 單擊“批量刪除”和“刪除”時&#xff0c;會攜帶需要刪除的菜品的id以delete請求方式向“/dish”發送請求。 URLhttp://127.0.0.1:8080/dish調用方法DELETE參數ids DishController添加刪除方法 …

Day22打卡-復習

復習日 仔細回顧一下之前21天的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 泰坦尼克號人員生還預測https://www.kaggle.com/competitions/titanic/overview K…

L48.【LeetCode題解】904. 水果成籃

目錄 1.題目 2.分析 方法1:暴力枚舉 方法2:暴力解法的優化:滑動窗口 代碼 方法3:優化方法2:使用數組充當哈希表 方法4:四個變量分別充當籃子和籃子中水果的個數(最快!!!) 代碼 容易忽略的點 1.題目 https://leetcode.cn/problems/fruit-into-baskets/ 你正在探訪一家農…

Leetcode-BFS問題

LeetCode-BFS問題 1.Floodfill問題 1.圖像渲染問題 [https://leetcode.cn/problems/flood-fill/description/](https://leetcode.cn/problems/flood-fill/description/) class Solution {public int[][] floodFill(int[][] image, int sr, int sc, int color) {//可以借助另一…

Typora+PicGo+Gitee圖床配置教程 自動圖片上傳

配置步驟 #mermaid-svg-aPUbWs43XR5Rh7vf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-icon{fill:#552222;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-text{fill:#552222;stroke:#552222;}#…

養生:開啟健康生活的全新篇章

養生是一場關乎生活品質與身心健康的持續修行&#xff0c;從飲食調養到運動鍛煉&#xff0c;從睡眠管理到心態塑造&#xff0c;每個環節都對健康有著深遠影響。以下為你提供全面且實用的養生指南。 飲食養生&#xff1a;科學膳食&#xff0c;滋養生命 合理的飲食是養生的根基…

Python | 赤道頻散關系圖

寫在前面 寫開題報告&#xff0c; 想用個圖發現截出來全是糊的。索性自己畫了&#xff0c;主要實現的Matsuno&#xff08;1966&#xff09;的赤道波動頻散關系圖。但是&#xff0c;實在是沒有審美&#xff0c;其他文獻里都是黑色&#xff0c;這里非要用個紫色&#xff0c;因為…

Nexus 私有倉庫 + Nginx 反向代理部署文檔

1. 使用 Podman 部署 Nexus 3 podman run --name nexus -d \-p 8081:8081 \-v /data:/nexus-data \-v /etc/localtime:/etc/localtime \-e TZ"Asia/Shanghai" \-e INSTALL4J_ADD_VM_PARAMS"-Xms10240m -Xmx10240m -XX:MaxDirectMemorySize4096m" \docker.…

一.Gitee基本操作

一.初始化 1.git init初始化倉庫 git init 用于在當前目錄下初始化一個本地 Git 倉庫&#xff0c;讓這個目錄開始被 Git 跟蹤和管理。 生成 .git 元數據目錄&#xff0c;從而可以開始進行提交、回退、分支管理等操作。 2.git config user.name/user.email配置本地倉庫 # 設置…

力扣210(拓撲排序)

210. 課程表 II - 力扣&#xff08;LeetCode&#xff09; 這是一道拓撲排序的模板題。簡單來說&#xff0c;給出一個有向圖&#xff0c;把這個有向圖轉成線性的排序就叫拓撲排序。如果有向圖中有環就沒有辦法進行拓撲排序了。因此&#xff0c;拓撲排序也是圖論中判斷有向無環圖…

華為ensp實現跨vlan通信

要在網絡拓撲中實現主機192.168.1.1、192.168.1.2和192.168.2.1之間的互相通信&#xff0c;需要正確配置交換機&#xff08;S5700&#xff09;和路由器&#xff08;AR3260&#xff09;&#xff0c;以確保不同網段之間的通信&#xff08;即VLAN間路由&#xff09;。 網絡拓撲分析…

熱部署與雙親委派

熱部署初探與雙親委派機制 一、熱部署初探 ? 熱部署就是在不重啟服務的情況下&#xff0c;無需重新啟動整個應用&#xff0c;就能對代碼、配置等進行更新并使新的更改在服務中生效。以下代碼可以打破雙親委派機制&#xff0c;利用類加載器的隔離實現熱部署。可分為以下三步進…

AWS SNS:解鎖高并發消息通知與系統集成的云端利器

導語 在分布式系統架構中&#xff0c;如何實現高效、可靠的消息通知與跨服務通信&#xff1f;AWS Simple Notification Service&#xff08;SNS&#xff09;作為全托管的發布/訂閱&#xff08;Pub/Sub&#xff09;服務&#xff0c;正在成為企業構建彈性系統的核心組件。本文深度…

驅動開發硬核特訓 · Day 30(下篇): 深入解析 lm48100q I2C 音頻編解碼器驅動模型(基于 i.MX8MP)

作者&#xff1a;嵌入式Jerry 視頻教程請關注 B 站&#xff1a;“嵌入式Jerry” 一、背景與目標 在本篇中&#xff0c;我們圍繞 TI 的 lm48100q 音頻編解碼器 展開&#xff0c;深入講解其作為 I2C 外設如何集成至 Linux 內核音頻子系統&#xff08;ASoC&#xff09;&#xff0…

idea寫spark程序

步驟 1&#xff1a;創建 Maven 項目 打開 IntelliJ IDEA&#xff0c;選擇 File > New > Project。選擇 Maven&#xff0c;勾選 Create from archetype&#xff0c;選擇 org.apache.maven.archetypes:maven-archetype-quickstart。填寫 GroupId&#xff08;如 com.exampl…

【C語言練習】032. 編寫帶參數的函數

032. 編寫帶參數的函數 032. 編寫帶參數的函數1. 定義帶參數的函數示例1:定義一個帶參數的函數輸出結果2. 傳遞多個參數示例2:定義一個帶多個參數的函數輸出結果3. 傳遞數組作為參數示例3:定義一個帶數組參數的函數輸出結果4. 傳遞結構體作為參數示例4:定義一個帶結構體參數…

Java虛擬機的基本結構

jvm它包含以下部分 第一個&#xff1a;類加載系統 類加載子系統&#xff0c;負責類的加載。類加載器有三種類型&#xff1a;引導類加載器、擴展類加載器、應用程序類加載器。 第二個&#xff1a;運行時數據區 包含了程序計數器、Java虛擬機棧、本地方法棧、堆 、方法區。 程…

uniapp引入七魚客服微信小程序SDK

小程序引入七魚sdk 1.微信公眾平臺引入2.代碼引入3.在pagesQiyu.vue初始化企業appKey4.跳轉打開七魚客服 1.微信公眾平臺引入 賬號設置->第三方設置->添加插件->搜索 QIYUSDK ->添加 2.代碼引入 在分包中引入插件 "subPackages": [{"root":…

手撕算法(定制整理版2)

最長無重復子字符串 class Solution(object):def lengthOfLongestSubstring(self, s):""":type s: str:rtype: int"""if not s:return 0max_len 0tp []for a in s:while a in tp:del tp[0]tp.append(a)if len(tp) > max_len:max_len len(…