CSharp、Java、Go、Python 枚舉的用法

发布时间:2026/7/12 20:01:47
CSharp、Java、Go、Python 枚舉的用法 展示了一个多语言实现的算法演示程序包含了Python、Go、C#和Java四种编程语言的版本。核心功能是通过枚举类型管理不同的图算法如Dijkstra最短路径算法和Floyd-Warshall全源最短路径算法并提供了交互式菜单供用户选择要运行的算法示例。所有版本都实现了枚举类型定义算法选项中文名称映射交互式菜单选择算法示例执行功能循环选择机制各语言版本保持一致的架构和功能展示了如何在不同的编程语言中实现相同的设计模式。代码结构清晰python:# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Algorithms # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/12 9:43 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : CheckAlgorithms.py import asyncio from enum import Enum, auto # 导入枚举相关模块 import Bll.FloydWarshallBll import Bll.DijkstraBll class Designlgorithm(Enum): 设计模式枚举 - 每个枚举成员对应一个设计模式的示例函数 Dijkstra auto() 最短路径算法 FloydWarshall auto() # 全源最短路径算法 def show_example(self): 枚举成员方法根据当前枚举值执行对应的示例函数 :return: pattern_handlers { Designlgorithm.Dijkstra: lambda: (Bll.DijkstraBll.DijkstraBll().demo()), Designlgorithm.FloydWarshall: lambda: (Bll.FloydWarshallBll.FloydWarshallBll().demo()), } # 获取当前枚举对应的示例函数并执行 handler pattern_handlers.get(self) if handler: print(f\n 展示【{self.name} Pattern{self._name_to_cn(self.name)}】示例 ) handler() else: print(f❌ 暂未实现{self.name}的示例) staticmethod def _name_to_cn(name: str) - str: 枚举名称转中文提升可读性 :param name: :return: cn_map { Dijkstra: 最短路径算法, FloydWarshall: 全源最短路径算法, } return cn_map.get(name, name) # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Algorithms # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/12 9:40 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : main.py import sys import io sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8) import Controller.CheckAlgorithms def select_design_pattern() - tuple[int, Controller.CheckAlgorithms.Designlgorithm | None]: 返回 (序列号, 选中的枚举对象)退出则返回 (0, None) :return: print(\n 方式3用户选择展示 ) print(可选设计模式输入0或q退出) for idx, pattern in enumerate(Controller.CheckAlgorithms.Designlgorithm, 1): print(f{idx}. {pattern._name_to_cn(pattern.name)}{pattern.name}) print(0. 退出) while True: user_input input(\n请输入序号选择要展示的设计模式输入0/q退出).strip() if user_input in (0, q, Q): print( 退出选择流程) return (0, None) try: choice int(user_input) if 1 choice len(Controller.CheckAlgorithms.Designlgorithm): selected_pattern list(Controller.CheckAlgorithms.Designlgorithm)[choice - 1] print(f✅ 你选择了序号{choice}对应{selected_pattern._name_to_cn(selected_pattern.name)}) return (choice, selected_pattern) # 返回(序列号, 枚举对象) else: print(f❌ 输入无效请输入1-{len(Controller.CheckAlgorithms.Designlgorithm)}之间的数字或0/q退出) except ValueError: print(❌ 输入无效请输入数字序号或0/q退出) def ask_continue() - bool: 询问用户是否继续选择返回True继续/False退出 while True: user_choice input(\n是否继续选择其他设计模式(y/n)).strip().lower() if user_choice y: return True elif user_choice n: print( 感谢使用程序结束) return False else: print(❌ 输入无效请输入 y继续或 n退出) if __name__ __main__: # 方式1用户输入选择展示交互版 print(\n 方式1用户选择展示 ) print(可选设计模式) for idx, pattern in enumerate( bll.CheckPatterns.DesignPattern, 1): print(f{idx}. {pattern._name_to_cn(pattern.name)}{pattern.name}) try: choice int(input(\n请输入序号选择要展示的设计模式)) selected_pattern list( bll.CheckPatterns.DesignPattern)[choice - 1] selected_pattern.show_example() except (ValueError, IndexError): print(❌ 输入无效请输入正确的序号) # 2 print( 设计模式示例展示程序) while True: # 1. 选择设计模式 selected_num, selected_pattern select_design_pattern() # 2. 判断是否直接退出输入0/q if selected_num 0: print( 程序结束) break # 3. 执行选中的示例 selected_pattern.show_example() print(f\n 本次选择的序列号是{selected_num}) # 4. 询问是否继续 if not ask_continue(): break # 用户选择不继续终止循环 print(hi,welcome geovindu.)go/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Algorithms # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/11 22:57 # User : geovindu # Product : GoLand # Project : goalgorithms # File : checkalgorithms.go */ package controller import ( fmt goalgorithms/bll ) type DesignAlgorithms int const ( Dijkstra DesignAlgorithms iota FloydWarshall ) func (d DesignAlgorithms) String() string { switch d { case Dijkstra: return Dijkstra case FloydWarshall: return FloydWarshall default: return UNKNOWN } } // 4. 枚举转中文名称和你 Python 一样 func (d DesignAlgorithms) ToChinese() string { nameMap : map[DesignAlgorithms]string{ Dijkstra: 最短路径算法, FloydWarshall: 全源最短路径算法, } return nameMap[d] } // 5. 核心方法ShowExample() func (d DesignAlgorithms) ShowExample() { fmt.Println(\n 展示【 d.String() Pattern d.ToChinese() 】示例 ) // 映射枚举 → 执行函数和Python 的 pattern_handlers 完全一样 switch d { case Dijkstra: bll.DijkstraMain() // 调用你的 bll 层 case FloydWarshall: bll.FloydWarshallMain() // ... 其他模式自己补全 default: fmt.Println(❌ 暂未实现 d.String() 的示例) } } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Algorithms # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/8 23:07 # User : geovindu # Product : GoLand # Project : goalgorithms # File : main.go */ package main import ( bufio fmt goalgorithms/controller os strconv strings ) // 所有设计模式列表和枚举顺序一致 var allPatterns []controller.DesignAlgorithms{ controller.Dijkstra, controller.FloydWarshall, } // selectDesignPattern 用户选择设计模式 // 返回 (序号, 选中模式, 是否退出) func selectDesignPattern() (int, controller.DesignAlgorithms, bool) { fmt.Println(\n 方式3用户选择展示 ) fmt.Println(可选设计模式输入0或q退出) // 打印所有模式 for idx, pattern : range allPatterns { fmt.Printf(%d. %s%s\n, idx1, pattern.ToChinese(), pattern.String()) } fmt.Println(0. 退出) // 循环读取输入 for { fmt.Print(\n请输入序号选择要展示的设计模式输入0/q退出) // 读取一行输入 reader : bufio.NewReader(os.Stdin) input, _ : reader.ReadString(\n) input strings.TrimSpace(input) input strings.ToLower(input) // 退出逻辑 if input 0 || input q { fmt.Println( 退出选择流程) return 0, 0, true } // 转数字 choice, err : strconv.Atoi(input) if err ! nil { fmt.Println(❌ 输入无效请输入数字序号或0/q退出) continue } // 判断范围 if choice 1 || choice len(allPatterns) { fmt.Printf(❌ 输入无效请输入1-%d之间的数字或0/q退出\n, len(allPatterns)) continue } // 选中 selected : allPatterns[choice-1] fmt.Printf(✅ 你选择了序号%d对应%s\n, choice, selected.ToChinese()) return choice, selected, false } } // askContinue 询问是否继续 func askContinue() bool { for { fmt.Print(\n是否继续选择其他设计模式(y/n)) reader : bufio.NewReader(os.Stdin) input, _ : reader.ReadString(\n) input strings.TrimSpace(strings.ToLower(input)) if input y { return true } else if input n { fmt.Println( 感谢使用程序结束) return false } else { fmt.Println(❌ 输入无效请输入 y继续或 n退出) } } } //TIP pTo run your code, right-click the code and select bRun/b./p pAlternatively, click // the icon srcAllIcons.Actions.Execute/ icon in the gutter and select the bRun/b menu item from here./p func main() { fmt.Println( 设计模式示例展示程序) for { // 1. 选择模式 selectedNum, selectedPattern, isExit : selectDesignPattern() if isExit { fmt.Println( 程序结束) break } // 2. 展示示例 selectedPattern.ShowExample() fmt.Printf(\n 本次选择的序列号是%d\n, selectedNum) // 3. 是否继续 if !askContinue() { break } } }C#:/* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Algorithms # Author : geovindu,Geovin Du 涂聚文. # IDE : vs2026 c# .net 10 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/07/04 22:16 # User : geovindu # Product : Visual Studio 2026 # Project : CSharpAlgorithms # File : DesignAlgorithm.cs */ using CSharpAlgorithms.Bll; using System; using System.Collections.Generic; using System.Text; namespace CSharpAlgorithms.Controller { /// summary /// 算法枚举对应原 Designlgorithm /// /summary public enum DesignAlgorithm { Dijkstra, FloydWarshall } /// summary /// /// /summary public static class DesignAlgorithmExtensions { /// summary /// 根据枚举执行对应示例 /// /summary public static void ShowExample(this DesignAlgorithm algorithm) { DictionaryDesignAlgorithm, Action patternHandlers new() { { DesignAlgorithm.Dijkstra, () new DijkstraBll().Demo() }, { DesignAlgorithm.FloydWarshall, () new FloydWarshallBll().Demo() } }; if (patternHandlers.TryGetValue(algorithm, out var handler)) { string cnName NameToCn(algorithm.ToString()); Console.WriteLine($\n 展示【{algorithm} Pattern{cnName}】示例 ); handler.Invoke(); } else { Console.WriteLine($❌ 暂未实现{algorithm}的示例); } } /// summary /// 枚举名称转中文 /// /summary private static string NameToCn(string name) { Dictionarystring, string cnMap new() { { Dijkstra, 最短路径算法 }, { FloydWarshall, 全源最短路径算法 } }; return cnMap.TryGetValue(name, out var val) ? val : name; } /// summary /// 对外获取中文名称菜单遍历使用 /// /summary public static string GetCnName(this DesignAlgorithm algorithm) { return NameToCn(algorithm.ToString()); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Algorithms # Author : geovindu,Geovin Du 涂聚文. # IDE : vs2026 c# .net 10 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/07/04 22:16 # User : geovindu # Product : Visual Studio 2026 # Project : CSharpAlgorithms # File : Program.cs */ using CSharpAlgorithms.Controller; using CSharpAlgorithms.Dijkstra; using System.Text; namespace CSharpAlgorithms { /// summary /// /// /summary internal class Program { /// summary /// /// /summary /// param nameargs/param static void Main(string[] args) { // 控制台强制UTF8输出对应Python sys.stdout编码设置 Console.OutputEncoding Encoding.UTF8; Console.InputEncoding Encoding.UTF8; Console.WriteLine( 算法示例展示程序); while (true) { // 1. 用户选择算法 var selectResult SelectAlgorithm(); int selectedNum selectResult.Item1; DesignAlgorithm? selectedPattern selectResult.Item2; // 输入0/q退出主循环 if (selectedNum 0) { Console.WriteLine( 程序结束); break; } // 执行选中算法示例 selectedPattern!.Value.ShowExample(); Console.WriteLine($\n 本次选择的序列号是{selectedNum}); // 是否继续选择 if (!AskContinue()) { break; } } Console.WriteLine(hi,welcome geovindu.); } #region 工具方法 /// summary /// 弹出选择菜单返回(序号,枚举对象)(0,null)代表退出 /// /summary static (int, DesignAlgorithm?) SelectAlgorithm() { Console.WriteLine(\n 方式3用户选择展示 ); Console.WriteLine(可选算法输入0或q退出); // 遍历枚举输出菜单 var allAlgorithms Enum.GetValues(typeof(DesignAlgorithm)).CastDesignAlgorithm().ToList(); for (int i 0; i allAlgorithms.Count; i) { var item allAlgorithms[i]; Console.WriteLine(${i 1}. {item.GetCnName()}{item}); } Console.WriteLine(0. 退出); while (true) { Console.Write(\n请输入序号选择要展示的算法输入0/q退出); string? userInput Console.ReadLine()?.Trim() ?? string.Empty; // 退出指令 if (userInput is 0 or q or Q) { Console.WriteLine( 退出选择流程); return (0, null); } // 解析数字序号 if (!int.TryParse(userInput, out int choice)) { Console.WriteLine(❌ 输入无效请输入数字序号或0/q退出); continue; } // 范围校验 int maxIndex allAlgorithms.Count; if (choice 1 || choice maxIndex) { Console.WriteLine($❌ 输入无效请输入1-{maxIndex}之间的数字或0/q退出); continue; } DesignAlgorithm target allAlgorithms[choice - 1]; Console.WriteLine($✅ 你选择了序号{choice}对应{target.GetCnName()}); return (choice, target); } } /// summary /// 询问是否继续选择 y/n /// /summary static bool AskContinue() { while (true) { Console.Write(\n是否继续选择其他算法(y/n)); string? input Console.ReadLine()?.Trim().ToLower() ?? string.Empty; if (input y) return true; if (input n) { Console.WriteLine( 感谢使用程序结束); return false; } Console.WriteLine(❌ 输入无效请输入 y继续或 n退出); } } #endregion } }java:/** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Algorithms * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/12 - 11:42 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : DesignAlgorithm.java * explain : 学习 类 **/ package Controller; import Bll.DijkstraBll; import Bll.FloydWarshallBll; import java.util.HashMap; import java.util.Map; public enum DesignAlgorithm { Dijkstra, FloydWarshall; private static final MapString, String CN_MAP; private static final MapDesignAlgorithm, Runnable HANDLERS; static { CN_MAP new HashMap(); CN_MAP.put(Dijkstra, 最短路径算法); CN_MAP.put(FloydWarshall, 全源最短路径算法); HANDLERS new HashMap(); HANDLERS.put(Dijkstra, () - new DijkstraBll().demo()); HANDLERS.put(FloydWarshall, () - new FloydWarshallBll().demo()); } public void showExample() { Runnable handler HANDLERS.get(this); if (handler ! null) { String cnName nameToCn(this.name()); System.out.printf(\n 展示【%s Pattern%s】示例 %n, this.name(), cnName); handler.run(); } else { System.out.printf(❌ 暂未实现%s的示例%n, this.name()); } } public static String nameToCn(String name) { return CN_MAP.getOrDefault(name, name); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述 Algorithms * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/9 - 22:55 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : Main.java * explain : 学习 类 **/ import Controller.*; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.util.*; import java.util.List; import java.util.stream.Collectors; public class Main { private static final Scanner SCANNER new Scanner(System.in); // 局部创建Scanner用完不提前关闭判断hasNextLine再读取 public static void main(String[] args) { Scanner scanner new Scanner(System.in); System.out.println( 算法示例展示程序); while (true) { SelectResult result selectAlgorithm(scanner); int selectedNum result.num; DesignAlgorithm selectedPattern result.pattern; if (selectedNum 0) { System.out.println( 程序结束); break; } selectedPattern.showExample(); System.out.printf(\n 本次选择的序列号是%d%n, selectedNum); if (!askContinue(scanner)) { break; } } System.out.println(hi,welcome geovindu.); scanner.close(); } static class SelectResult { int num; DesignAlgorithm pattern; SelectResult(int num, DesignAlgorithm pattern) { this.num num; this.pattern pattern; } } private static SelectResult selectAlgorithm(Scanner scanner) { System.out.println(\n 方式3用户选择展示 ); System.out.println(可选算法输入0或q退出); ListDesignAlgorithm allAlgorithms Arrays.asList(DesignAlgorithm.values()); for (int i 0; i allAlgorithms.size(); i) { DesignAlgorithm item allAlgorithms.get(i); String cn DesignAlgorithm.nameToCn(item.name()); System.out.printf(%d. %s%s%n, i 1, cn, item.name()); } System.out.println(0. 退出); while (true) { System.out.print(\n请输入序号选择要展示的算法输入0/q退出); // 关键先判断是否存在输入再读取防止抛异常 if (!scanner.hasNextLine()) { return new SelectResult(0, null); } String input scanner.nextLine().trim(); if (0.equals(input) || q.equalsIgnoreCase(input)) { System.out.println( 退出选择流程); return new SelectResult(0, null); } int choice; try { choice Integer.parseInt(input); } catch (NumberFormatException e) { System.out.println(❌ 输入无效请输入数字序号或0/q退出); continue; } int max allAlgorithms.size(); if (choice 1 || choice max) { System.out.printf(❌ 输入无效请输入1-%d之间的数字或0/q退出%n, max); continue; } DesignAlgorithm target allAlgorithms.get(choice - 1); String cnName DesignAlgorithm.nameToCn(target.name()); System.out.printf(✅ 你选择了序号%d对应%s%n, choice, cnName); return new SelectResult(choice, target); } } private static boolean askContinue(Scanner scanner) { while (true) { System.out.print(\n是否继续选择其他算法(y/n)); // 增加输入存在判断解决 NoSuchElementException if (!scanner.hasNextLine()) { System.out.println( 输入流中断程序退出); return false; } String input scanner.nextLine().trim().toLowerCase(); if (y.equals(input)) { return true; } if (n.equals(input)) { System.out.println( 感谢使用程序结束); return false; } System.out.println(❌ 输入无效请输入 y继续或 n退出); } } }