黑马程序员技术交流社区
标题:
只有首次运行正常
[打印本页]
作者:
黄珍
时间:
2012-5-20 13:54
标题:
只有首次运行正常
首先定义一个类:
class Ticket
{
private int distance;
public int Distance
{
get { return distance; }
}
//private decimal price;
public decimal Price
{
get
{
if (distance>=2000)
{
return 1.0m * distance * 0.6m;
}
else if (distance >= 1500)
{
return distance * 0.7m;
}
else if (distance >= 1000)
{
return distance * 0.8m;
}
else if (distance >= 500)
{
return distance * 0.9m;
}
else
{
return distance * 1.0m;
}
}
}
public Ticket(int distance)
{
if (distance < 0)
{
Exception error = new Exception("距离不能为负数!");
throw error;
}
else
{
this.distance = distance;
}
}
public void showPrice()
{
Console.WriteLine("距离为{0}的票价为{1}", distance, Price);
}
}
这是Main函数:
static void Main(string[] args)
{
while (true)
{
string input = Console.ReadLine();
if (input == "exit")
{
Console.WriteLine("程序结束");
break;
}
else
{
int inputnumber = Convert.ToInt32(input);
Ticket car = new Ticket(inputnumber);
car.showPrice();
Console.ReadKey();
}
}
}
问题一:当第一次输入exit程序正常结束运行,若非第一次输入则报错。
问题二:当第一次输入数字时正常,若再继续输入则第一位会丢失。比如输入500则成了0,输入57则成了7
这两个问题感觉是同一个问题,不知道怎么会这样?
作者:
喻健
时间:
2012-5-20 14:55
本帖最后由 喻健 于 2012-5-20 14:58 编辑
把Main()函数中的Console.ReadKey()去掉即可。因为第二次执行的时候的值是你这个Console.ReadKey()读到的值,而你肯定是输入的ENTER键。
把输入加一个判断条件,如果不是数字就提示错误。
try
{
int inputnumber = Convert.ToInt32(input);
Ticket car = new Ticket(inputnumber);
car.showPrice();
}
catch
{
Console.Write("输入有误");
}
复制代码
作者:
吴淑金
时间:
2012-5-20 14:58
你把这条 Console.ReadKey(); 删了 ,就都可以了
作者:
吴淑金
时间:
2012-5-20 15:01
string input = Console.ReadLine();已经在等待并获取输入字符了,所以 Console.ReadKey();就不需要了,而且你没有判断除了数字和“exit”的情况,乱输就会有问题了。。
作者:
黄珍
时间:
2012-5-20 16:42
果然!{:soso_e185:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2