有一個C#專案,對word.txt中的單詞進行排序。 如果我輸入選擇=10,這個專案中的switch-case也會跳到case '1',并且除錯器顯示選擇值=49,我不知道為什么?
如果我嘗試輸入1到9以外的數字,程式仍然會轉到第一個數字的case code(如果我輸入13或14跳到case'1',如果我輸入31或35跳到case'3')。我不知道為什么會發生這種情況。我應該如何在選單中設定1到9的意外數字的例外處理?

using System;
using System.Collections.Generic;
using System.Text.Document; using System.Text.Document
使用System.Threading.Tasks;
使用System.Diagnostics;
namespace Lab1
{
class Program {
{
//定義Words.txt中的單詞串列。
private static List< string> txt = new List<string>()。
static void Main(string[] args)?
{
int choice = 0;
//顯示選單[/span
while (true)
{
Console.WriteLine("選項")。
Console.WriteLine("----------")。
Console.WriteLine("1 - 從檔案匯入單詞")。
Console.WriteLine("2 - Bubble Sort Words");
Console.WriteLine("3 - LINQ/LAMBDA Sort Words");
Console.WriteLine("4 - Count The Distinct Words");
Console.WriteLine("5 - 取前10個詞")。
Console.WriteLine("6 - 獲取以'j'開頭的詞的數量并顯示計數")。
Console.WriteLine("7 - 獲取并顯示以'd'結尾的單詞數量并顯示計數")。
Console.WriteLine("8 - 獲取并顯示長度大于4個字符的詞語,并顯示計數")。
Console.WriteLine("9 - 獲取并顯示長度小于3個字符且以'a'開頭的單詞,并顯示數量")。
Console.WriteLine("x - Exit")。
Console.WriteLine()。
Console.Write("做一個選擇:")。
try
{
choice = Console.Read();
Console.ReadLine()。
switch (choice)
{
case '1'/span>:
readFile()。
break;
case '2':
bubbleSort(txt)。
break;
case '3':
lambdaSort(txt);
break;
case '4':
countDistinctWords(txt);
break;
case '5':
firstTenWords(txt);
break;
case '6':
startsWithJ(txt);
break;
case '7':
endsWithD(txt);
break;
case '8':
greaterFourLetters(txt);
break;
case '9'/span>:
lessThreeLetters(txt)。
break;
case 'x':
Console.WriteLine("Exit")。
System.Environment.Exit(0)。
break;
default:
Console.Clear()。
Console.WriteLine("Invalid Input
")。)
break。
}
}
catch (Exception)
{
Console.WriteLine("Invalid Input")。
}
}
}
private static void readFile()
{
Console.Clear()。
try
{
StreamReader reader = new StreamReader("Words.txt"/span>)。
string word。
int counter = 0;
Console.WriteLine("Reading Words")。
while ((word = reader.ReadLine()) != null)
{
txt.Add(word)。
counter ;
}
Console.WriteLine("Reading Words Complete")。
Console.WriteLine("發現的單詞數:{0}", counter)。
Console.WriteLine()。
}
catch(IOException)
{
Console.WriteLine("無法找到word.txt檔案")。
}
}
private static List<string> bubbleSort(List<string> txt)
{
Console.Clear()。
秒表watch = Stopwatch.StartNew()。
for (int i = 0; i < (txt.Count - 1); i )
{
for (int j = i 1; j < txt.Count; j )
{
if (string.Compare(txt[j], txt[i]) < 0)
{
string tempString = txt[j];
txt[j] = txt[i];
txt[i] = tempString。
}
}
}
watch.Stop()。
Console.WriteLine("Elapsed Time: {0} ms", watch.ElapsedMilliseconds);
Console.WriteLine()。
return txt;
}
private static List<string> lambdaSort(List<string> words)
{
Console.Clear()。
秒表watch = Stopwatch.StartNew()。
//var query = from x in words orderby x select x;
var query = words.OrderBy(str => str).ToList();
words = query;
watch.Stop();
Console.WriteLine("Elapsed Time: {0} ms", watch.ElapsedMilliseconds)。
return詞。
}
private static void firstTenWords( List< string> words)。
{
Console.Clear()。
var tenWords = words.Take(10).ToList();
foreach (var word in tenWords)
{
Console.WriteLine(word)。
}
Console.WriteLine();
}
private static void startsWithJ(List< string> words)。
{
Console.Clear()。
//int count = (from x in words where x.StartsWith("j")).Select().Count();
var query = from x in words where x. StartsWith("j") select x;
int count = 0;
foreach (var word in query)
{
Console.WriteLine(word)。
count ;
}
Console.WriteLine("以'j'開頭的詞的數量。{0}", count)。)
Console.WriteLine()。
}
private static void countDistinctWords(List< string> words)。
{
Console.Clear()。
int numDistinctWords = (from x in words select x) .Distinct().Count();
Console.WriteLine("明顯的詞的數量是。{0}", numDistinctWords)。)
Console.WriteLine()。
}
}
}
Words.txt。
的
的
對
和
a
在中
是的
它
你
他
他
是
for
在上。
是
與的關系
as
I
他的
他們
是
在
一
有
這個例子
從起
或 曾經
曾
by
熱
字
但
什么
些
我們
可以
出來的東西
其他
是
所有
在那里
當時
了
用
你的
如何
說
一個
每個
她
哪些
do他們的
他們的
時間
如果
將
方式
關于
許多
那么
他們
寫
會
似的
所以
這些
她
長新的作業
作業
部分
拿到
get
地點
制作
生活
where?
之后
后
小
只
圓的
人
年
來了
顯示
每一個
好
我
給
我們的
下
名
非常
通過
只是
形式
句子
很好
思考
說
幫助
低
行
不同
轉向
導致
多
意思是
前
移動
對
孩童
老
也
同樣
告知
做法
設定
三
要
空氣
好
也
播放
小
結束
放
家
閱讀
手
埠
大
咒語
添加
甚至
地
這里
必須
大
高
這種
遵循
行為
為什么
問
男人
變化
去了
陽光
種類
掉
需要
房子
圖片
嘗試
我們
再次
動物
點
母親
世界
靠近
建立
自己
地
父親
負責人
站立
自己的
ページ
應
國家
發現
答案
學校
增長
研究
仍然
學習
種植
覆寫
食物
太陽
四
之間
狀況
保持
視覺
從不
最后
讓
思想
城市
樹
十字
農場
艱苦
開始
可能
故事
看到
遙遠的
海
畫
剩
遲到
運行
不't
而
按下
關閉
晚上
真實
生活
少
北方
敞開
貌似
一起
下一個
白
兒童
開始
得到了
走
例子
緩解
紙張
組
總是
音樂
那些
兩者
符號
往往
信
直到
里
河流
轎車
腳
照顧
第二
書
攜帶
攜帶了
科學
吃
房間
朋友
開始
理念
魚
山
暫停
一次
基地
聽
馬
削減
確信
觀察
顏色
表面
木頭
主要
足夠
樸素
女孩
平時
年輕
準備
以上
曾經
紅
串列
雖然
感覺
談話
禽鳥
很快
尸體
狗
家庭
直接
姿勢
離開
歌曲
措施
門
產品
???
短
數字
類
風
問題
發生
完成
船
地區
一半
巖石
秩序
火災
南方
問題
塊
告訴
知道
通過
因為
頂端
全部
王
空間
聽說
最好的
小時
更好的
真實
期間
100
五
記住
步驟
早期
持有
西部
地面
興趣
到達
快速
動詞
唱歌
聽
六
桌子
旅行
少
上午
十
簡單
幾
元音
向
爭斗
奠定
反對
模式
緩慢
中心
愛
人
錢
服務
出現
路
地圖
雨
治理
治理
拉
冷
告知
聲音
單位
權力
鎮
罰款
某種
飛
秋天
鉛
哭泣
黑暗
機器
注意
等待
計劃
數字
星
箱子
名詞
領域
休息
正確
能
重擊
完成
靚麗
驅動器
站立
包含
前面
教
周
最后
給
綠
哦
快
發展
海洋
溫暖
免費
分鐘
強
特殊的
心靈
后面
清楚
尾巴
生產
事實
街頭
寸
倍增
無
歷程
逗留
輪子
充滿
力量
藍
宗旨
決定
表面
深
月亮
島
腳
系統
忙
測驗
記錄
船
普通
金
可能的
飛機
堅定的
干燥
驚嘆
笑
千
前
運行
檢查
游戲
形狀
等于
熱
錯過
帶來的
熱
雪
輪胎
帶
是
遙遠的
填補
東部
繪畫
語言
其中
盛大
球
然而
波
滴
心
是
現在
沉重
舞蹈
引擎
位置
手臂
寬大
帆
材質
尺寸
變化
解決
說
重量
一般
冰
事項
圓
對
包括
分割
音節
感覺
也許
選擇
突然
數
方
緣由
長度
代表
藝術
主題
區域
能量
狩獵
可能的
床
兄弟
蛋
乘坐
細胞
相信
分數
森林
坐
比賽
視窗
商店
夏天
火車
睡眠
證明
孤獨的
腿
運動
墻
接住
裝載
愿望
天空
木板
快樂
冬天
座位
寫的
野生
儀表
保持
玻璃
草
牛
作業
邊緣
標志
訪問
過去
軟
樂趣
鮮艷的
氣
天氣
月
萬
熊
完成
快樂
希望
花
衣服
奇怪
消失
跳躍
嬰孩
八
鄉村
遇見
根
買
飼養
解決
金屬
是否
推動
七
段
三
應
舉行
發
描述
烹飪
場地
或
結果
燃燒
山丘
安全
貓
世紀
考慮
型別
法律
位
海岸
拷貝
短語
無聲
高大
沙子
土壤
滾動
溫度
手指
工業
價值
斗爭
撒謊
打
興奮
自然
觀點
感覺
耳朵
其他
很
打破
案例
中
殺人
兒子
湖
瞬間
規模
響亮
春天
觀察
孩童
直
輔音
國家
詞典
牛奶
速度
方法
器官
薪酬
年齡
節
衣服
云
驚喜
安靜
石頭
小小的
攀登
酷
設計
貧窮
很多
實驗
底部
關鍵
鐵
單一
棍子
平坦的
二十
皮膚
笑容
皺紋
洞
交易
韻律
旅行
辦公室
收
行
口
準確
符號
死
至少
麻煩
吶喊
除了
寫道
種子
語氣
加入
建議
清潔
休息
女士
院子
崛起
糟糕
爆炸
油
血
觸摸
增長
分
混合
團隊
電線
成本
損失的
棕色
磨損
花園
平等
發送
選擇
跌倒
適合
流動
公平
銀行
收集
保存
控制
小數
溫柔
女人
隊長
練習
分開
困難
醫生
請
保護
中午
其
鎖定
戒指
字符
昆蟲
捕獲
期間
表示
廣播
講話
原子
人類
歷史
效果
電氣
預計
農作物
現代
元素
打
學生
角落
聚會
供應
骨頭
軌道
想象
提供
同意
因此
基礎設施
不會t
椅子
危險
果
豐富
厚
兵
程序
操作
猜測
必要的
銳利
翼
創造
鄰居
清洗
蝙蝠
而
人群
玉米
比較
詩
字串。
鈴鐺
依賴
肉
擦
管
著名
美元
流
恐懼
視覺
瘦
三角形
星球
匆忙
酋長
殖民地
鐘
礦山
領帶
進入
主要
鮮活的
搜索
發送
黃色
槍
允許
列印
死亡
地點
沙漠
適合
當前
升降機
玫瑰
繼續。
塊狀
圖表
帽子
銷售
成功
公司
減去
event
特定
交易
游泳
術語
相反
妻子
鞋子
肩膀
傳播
安排
營地
創作
棉花
出生
確定
夸特
九
卡車
噪聲
水平
機會
收集
商店
伸展
投擲
閃耀
財產
列
分子
選取
錯
灰色
重復
需要
闊
準備
鹽
鼻子
復數
憤怒
聲稱
大陸
氧氣
糖
死亡
靚麗
技巧
婦女
季節
解決辦法
磁鐵
銀器
謝謝
支部
匹配
后綴
特別是
畫面
害怕
巨大
妹妹
鋼鐵
討論
前進
類似
指南
經驗
分數
蘋果
買了
領先
瀝青
大衣
衣服
卡片
帶子
繩索
滑動
贏
夢想
晚上
條件
飼料
工具
共計
基本
聞
山谷
也不
雙座
座位
到達
主人
軌道
父母
岸邊
磁區
板塊
內容
贊成
溝通
職位
花
和諧
脂肪
欣然
原創
分享
站
爸爸
面包
收費
適當的
酒吧
提供
段
奴隸
鴨子
即時
市場
程度
填充
小雞
親愛的
敵人
回復
飲料
發生
支持
講話
自然
范圍
蒸汽
運動
路徑
液體
原木
意義
商數
牙齒
殼
頸部
的
的
的
和
a
在中
是的
它
你
他
他
是
for
在上。
是
與的關系
as
I
他的
他們
是
在
一
有
這個例子
從起
或 曾經
曾
by
熱
字
但
什么
些
我們
可以
出來的東西
其他
是
所有
在那里
當時
了
用
你的
如何
說
一個
每個
她
哪些
do他們的
他們的
時間
如果
將
方式
關于
許多
那么
他們
寫
會
似的
所以
這些
她
長新的作業
作業
部分
拿到
get
地點
制作
生活
where?
之后
后
小
只
圓的
人
年
來了
顯示
每一個
好
我
給
我們的
下
名
非常
通過
只是
形式
句子
很好
思考
說
幫助
低
行
不同
轉向
導致
多
意思是
前
移動
對
孩童
老
也
同樣
告知
做法
設定
三
要
空氣
好
也
播放
小
結束
放
家
閱讀
手
埠
大
咒語
添加
甚至
地
這里
必須
大
高
這種
遵循
行為
為什么
問
男人
變化
去了
陽光
種類
掉
需要
房子
圖片
嘗試
我們
再次
動物
點
母親
世界
靠近
建立
自己
地
父親
負責人
站立
自己的
ページ
應
國家
發現
答案
學校
增長
研究
仍然
學習
種植
覆寫
食物
太陽
四
之間
狀況
保持
視覺
從不
最后
讓
思想
城市
樹
十字
農場
艱苦
開始
可能
故事
看到
遙遠的
海
畫
剩
遲到
運行
不't
而
按下
關閉
晚上
真實
生活
少
北方
敞開
貌似
一起
下一個
白
兒童
開始
得到了
走
例子
緩解
紙張
組
總是
音樂
那些
兩者
符號
往往
信
直到
里
河流
轎車
腳
照顧
第二
書
攜帶
攜帶了
科學
吃
房間
朋友
開始
理念
魚
山
暫停
一次
基地
聽
馬
削減
確信
觀察
顏色
表面
木頭
主要
足夠
樸素
女孩
平時
年輕
準備
以上
曾經
紅
串列
雖然
感覺
談話
禽鳥
很快
尸體
狗
家庭
直接
姿勢
離開
歌曲
措施
門
產品
???
短
數字
類
風
問題
發生
完成
船
地區
一半
巖石
秩序
火災
南方
問題
塊
告訴
知道
通過
因為
頂端
全部
王
空間
聽說
最好的
小時
更好的
真實
期間
100
五
記住
步驟
早期
持有
西部
地面
興趣
到達
快速
動詞
唱歌
聽
六
桌子
旅行
少
上午
十
簡單
幾
元音
向
爭斗
奠定
反對
模式
緩慢
中心
愛
人
錢
服務
出現
路
地圖
雨
治理
治理
拉
冷
告知
聲音
單位
權力
鎮
罰款
某種
飛
秋天
鉛
哭泣
黑暗
機器
注意
等待
計劃
數字
星
箱子
名詞
領域
休息
正確
能
重擊
完成
靚麗
驅動器
站立
包含
前面
教
周
最后
給
綠
哦
快
發展
海洋
溫暖
免費
分鐘
強
特殊的
心靈
后面
清楚
尾巴
生產
事實
街頭
寸
倍增
無
歷程
逗留
輪子
充滿
力量
藍
宗旨
決定
表面
深
月亮
島
腳
系統
忙
測驗
記錄
船
普通
金
可能的
飛機
堅定的
干燥
驚嘆
笑
千
前
運行
檢查
游戲
形狀
等于
熱
錯過
帶來的
熱
雪
輪胎
帶
是
遙遠的
填補
東部
繪畫
語言
其中
盛大
球
然而
波
滴
心
是
現在
沉重
舞蹈
引擎
位置
手臂
寬大
帆
材質
尺寸
變化
解決
說
重量
一般
冰
事項
圓
對
包括
分割
音節
感覺
也許
選擇
突然
數
方
緣由
長度
代表
藝術
主題
區域
能量
狩獵
可能的
床
兄弟
蛋
乘坐
細胞
相信
分數
森林
坐
比賽
視窗
商店
夏天
火車
睡眠
證明
孤獨的
腿
運動
墻
接住
裝載
愿望
天空
木板
快樂
冬天
座位
寫的
野生
儀表
保持
玻璃
草
牛
作業
邊緣
標志
訪問
過去
軟
樂趣
鮮艷的
氣
天氣
月
萬
熊
完成
快樂
希望
花
衣服
奇怪
消失
跳躍
嬰孩
八
鄉村
遇見
根
買
飼養
解決
金屬
是否
推動
七
段
三
應
舉行
發
描述
烹飪
場地
或
結果
燃燒
山丘
安全
貓
世紀
考慮
型別
法律
位
海岸
拷貝
短語
無聲
高大
沙子
土壤
滾動
溫度
手指
工業
價值
斗爭
撒謊
打
興奮
自然
觀點
感覺
耳朵
其他
很
打破
案例
中
殺人
兒子
湖
瞬間
規模
響亮
春天
觀察
孩童
直
輔音
國家
詞典
牛奶
速度
方法
器官
薪酬
年齡
節
衣服
云
驚喜
安靜
石頭
小小的
攀登
酷
設計
貧窮
很多
實驗
底部
關鍵
鐵
單一
棍子
平坦的
二十
皮膚
笑容
皺紋
洞
交易
韻律
旅行
辦公室
收
行
口
準確
符號
死
至少
麻煩
吶喊
除了
寫道
種子
語氣
加入
建議
清潔
休息
女士
院子
崛起
糟糕
爆炸
油
血
觸摸
增長
分
混合
團隊
電線
成本
損失的
棕色
磨損
花園
平等
發送
選擇
跌倒
適合
流動
公平
銀行
收集
保存
控制
小數
溫柔
女人
隊長
練習
分開
困難
醫生
請
保護
中午
其
鎖定
戒指
字符
昆蟲
捕獲
期間
表示
廣播
講話
原子
人類
歷史
效果
電氣
預計
農作物
現代
元素
打
學生
角落
聚會
供應
骨頭
軌道
想象
提供
同意
因此
基礎設施
不會t
椅子
危險
果
豐富
厚
兵
程序
操作
猜測
必要的
銳利
翼
創造
鄰居
清洗
蝙蝠
而
人群
玉米
比較
詩
字串。
鈴鐺
依賴
肉
擦
管
著名
美元
流
恐懼
視覺
瘦
三角形
星球
匆忙
酋長
殖民地
鐘
礦山
領帶
進入
主要
鮮活的
搜索
發送
黃色
槍
允許
列印
死亡
地點
沙漠
適合
當前
升降機
玫瑰
繼續。
塊狀
圖表
帽子
銷售
成功
公司
減去
event
特定
交易
游泳
術語
相反
妻子
鞋子
肩膀
傳播
安排
營地
創作
棉花
出生
確定
夸特
九
卡車
噪聲
水平
機會
收集
商店
伸展
投擲
閃耀
財產
列
分子
選取
錯
灰色
重復
需要
闊
準備
鹽
鼻子
復數
憤怒
聲稱
大陸
氧氣
糖
死亡
靚麗
技巧
婦女
季節
解決辦法
磁鐵
銀器
謝謝
支部
匹配
后綴
特別是
畫面
害怕
巨大
妹妹
鋼鐵
討論
前進
類似
指南
經驗
分數
蘋果
買了
領先
瀝青
大衣
衣服
卡片
帶子
繩索
滑動
贏
夢想
晚上
條件
飼料
工具
共計
基本
聞
山谷
也不
雙座
座位
到達
主人
軌道
父母
岸邊
磁區
板塊
內容
贊成
溝通
職位
花
和諧
脂肪
欣然
原創
分享
站
爸爸
面包
收費
適當的
酒吧
提供
段
奴隸
鴨子
即時
市場
程度
填充
小雞
親愛的
敵人
回復
飲料
發生
支持
講話
自然
范圍
蒸汽
運動
路徑
液體
原木
意義
商數
牙齒
殼
頸部
uj5u.com熱心網友回復:
你在案例1中缺少一個引號。它應該是大小寫'1'。 在ASCII中,數字字符'1'在十進制中是49
---- UPDATE ----
根本原因是你定義的choice區域變數的資料型別是整數。因此,當把輸入值分配給這個變數時。會執行一個隱含的轉換。這意味著它將把ASCII字符轉換為十進制。
解決方案
方法1:將命令列的輸入轉換為整數
使用這種方法,你必須在switch.case中使用整數值。
int choice = 0。
...
choice = Convert.ToInt32(Console.Read())。
Console.ReadLine()。
switch (choice)
{
case 1:
readFile()。
break;
case 2:
bubbleSort(txt)。
break;
...
}
方法2:將choice的資料型別更新為string
使用這種方法,你必須在switch...case
string choice = string.empty;
...
switch (choice)
{
case "1"/span>:
readFile()。
break;
case "2"/span>:
bubbleSort(txt)。
break;
...
}
uj5u.com熱心網友回復:
如果我輸入choice = 10,這個專案中的switch-case也會跳到case '1',并且除錯器顯示choice值=49
如果我嘗試輸入1到9以外的數字,程式仍然會轉到第一個數字的case code(如果我輸入13或14跳到case '1',
你會注意到,你說的這些數字(10、13、14)都是以1開頭的,而且它們會進入大小寫1
如果我輸入31或35跳到case'3')
你會注意到,這兩個數字31,35,都是以3開頭的,它們會進入case 3
。你的代碼是:
choice = Console.Read();
Console.ReadLine()。
switch (choice)
{
case '1'/span>:
readFile()。
break;
Console.Read()讀取一個字符,并將其作為一個整數回傳(這在目前并不重要)
如果你要求你的用戶輸入一個數字,他們輸入了10,而你Console. Read(),然后是ReadLine(),那么Read()只讀取1(10的第一個字符),然后ReadLine()讀取其余的數字(由于你從未捕獲它,你的代碼扔掉了由ReadLine()讀取的 "0")。
這意味著你的代碼只根據用戶輸入的第一個字符來采取行動。他們可以輸入123456,而你的代碼將轉到案例1。他們可以輸入98743658726874365,你的代碼就會轉到case 9
。更重要的是,該字符被讀作一個整數,而整數和char在c#中是可以互換的。例如,在ASCII表中,A位于第65位,所以C#將'A'和65視為等值。你可以把'1'作為一個char來讀,它相當于49(作為一個10進制數字)或0x31(作為一個16進制數字)。這就是為什么你可以Read()1,它在choice整數中變成49,并且在列印時將顯示為49,并且可以在switch中與'1'進行比較。因為'1' == 49是真的
至于如何處理你的問題,請讀取用戶輸入的整個字串并進行比較:
string choice = Console.ReadLine(); /i made it a string
switch (choice)
{
case "1"/span>: //string "1", not char '1'.
readFile()。
break。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/323074.html
標籤:
