作者Tevety (番茄)
看板C_Sharp
標題[問題] 新手試做通訊錄
時間Tue Apr 12 01:11:13 2011
小的剛開始學C# (以前完全沒碰過程式...)
是一邊翻書一邊寫的,
這次是要寫一個簡單的通訊錄,
規定是這樣的:
制定手機類別,類別中之欄位與方法符合自己的需求。
讓使用者可以輸入友人電話及姓名。
讓使用者可以查詢友人的電話。
可是寫了之後有兩個比較重要的問題不知道該怎麼解決,
身邊也沒有人可以問ˊˋ
1. 在新增幾個聯絡人之後,如果我想查詢聯絡人,
而要查的人是放在新增陣列裡的話,他會跑出5個查無此人,
然後跑出一個"未處理的例外狀況...索引在陣列的界線外"
2. 如果要查詢的連絡人是在已經有寫資料的陣列裡的話,
他會跑出人名和電話沒錯,可是也會跑出5個查無此人,
也會出現和第一個問題一樣的錯誤
我試著用我所想的到的方式去改了,
可是越用越糟,我實在不知道該怎麼修他 Q Q
關於我設定的class很詭異的問題....
呃...因為實在想不出要怎麼用上,只好先這樣寫,
好像沒有造成error,所以就只好先暫時讓他長這樣了 ╮(╯__╰)╭
底下附上完整程式 ˊˋ
----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class phone
{
public static string[] Name;
public static string[] Num;
}
class Program
{
static void Main(string[] args)
{
for (; ; )
{
int j = 0;
string[] inN = new string[90];
string[] inNum = new string[90];
Console.WriteLine("==歡迎進入通訊錄==\n");
string[] Name = { "apple", "Ben", "Merry", "John", "lulu" };
String[] Num = { "0945999236", "0912984592", "0928499328",
"0929448104", "0948222941" };
Console.WriteLine("姓名\t 電話號碼");
Console.WriteLine("==================");
Array.Sort(Num, Name);
int i;
for (i = 0; i <= Name.GetUpperBound(0); i++)
{
Console.WriteLine("{0}\t{1}", Name[i], Num[i]);
}
string yes = "";
Console.WriteLine("\n是否要繼續新增聯絡人(Y/N)?");
yes = Console.ReadLine();
if (yes == "y" || yes == "Y")
{
do
{
Console.WriteLine("\n請輸入姓名");
inN[j] = Console.ReadLine();
Console.WriteLine("請輸入電話");
inNum[j] = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("\n是否要繼續新增聯絡人(Y/N)?");
yes = Console.ReadLine();
}
while (yes == "y" || yes == "Y");
}
Console.WriteLine("\n請選擇您要的動作");
Console.WriteLine("1.查詢聯絡人 2.撥號 3.離開 (3.)\n");
Console.Write("選擇→\t");
String Ans = Console.ReadLine();
if (Ans == "1")
{
Console.WriteLine("\n==通訊錄查詢==\n");
Console.WriteLine("姓名\t 電話號碼");
Console.WriteLine("==================");
Console.WriteLine("輸入欲查詢姓名");
string find = Console.ReadLine();
Array.Sort(inNum, inN);
for (int k = 0; k <= inN.GetUpperBound(0); k++)
{
if (find == inN[k])
{
Console.WriteLine("{0}\t{1}", inN[k], inNum[k]);
}
else if (find == Name[k])
{
Console.WriteLine("{0}\t{1}", Name[k], Num[k]);
}
else
{
Console.WriteLine("查無此人!!");
}
}
}
else if (Ans == "2")
{
Console.WriteLine("\n請鍵入電話號碼");
String Call = Console.ReadLine();
Console.WriteLine("\n正在撥號給{0}\n", Call);
}
if (Ans == "3" || Ans != "1" || Ans != "2")
{
break;
}
Console.WriteLine("\n正在離開程式\n");
}
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.240.117
1F:推 kw0006667:快速的看了一下前面…新增的地方,一直用j變數,但它一 04/12 01:16
2F:→ kw0006667:直是"0"吧?再怎麼加,應該都只有一筆。你可以用設中斷 04/12 01:17
3F:→ kw0006667:點的方式,看一下陣列裡面的值,是不是都有輸入進去。 04/12 01:18
4F:→ james732:for使用 <= 的話就會多跑一次,改成 < 試試看 04/12 02:11
5F:→ Tevety:j之前有用for迴圈 可是我寫出來的狀態只會讓人一直新增 04/12 08:35
6F:→ Tevety:直到滿足<=條件為止 可是我是希望他每跑一次就問一次要不要 04/12 08:36
7F:→ Tevety:新增 要的話再跑 不要就跳出....ˊˋ 可是不會寫成這樣 04/12 08:37
8F:推 ianfang:for迴圈中間的條件可不是只能<=或>= 可以給一個值= =時 04/12 21:16
9F:→ ianfang:繼續做阿 04/12 21:16
10F:→ Tevety:我剛剛嘗試把j的部分做了for迴圈 04/12 22:41
11F:→ Tevety:可是檢查時發現他不會一個個存資料進去 只會保留最新的~"~ 04/12 22:42
12F:→ Tevety:最前面宣告int j; 再在do..while裡加了for(j=0;j==90;j++); 04/12 22:44
13F:→ Tevety:目前還是一樣ˊˋ 04/12 22:45
15F:→ james732:這不是很好的寫法 (但應該不難懂) 04/12 23:33
16F:→ Tevety:O.O 哦哦哦哦 原來可以這樣寫 04/13 01:02
17F:→ Tevety:真的好懂! 謝謝大家 我要來研究看看了 :D 04/13 01:04