作者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