一个出租车计费的小程序,通过了编译,但运行出错,请教各位高手!!!

blackhorsefeifei 2008-05-15 12:59:17
/**
* 出租车计费程序
* 7:00到23:00之间,起价10元,在3公里以内收取起价,超过3公里,超出的里程每公里收取1.2元。
* 如果不在这个时段,起价11元,在3公里以内收取起价,超过3公里,超出的里程每公里收取1.4元。
* 编写程序计算收费金额。要求:可以从命令行输入公里数,在程序中使用Java中现有的类,自动获取
* 系统时间,并将最终计算结果显示出来。
*/
import java.util.Calendar;

public class CalcTaxi
{
static int len;//行驶公里数
float startPrice;//起价
float startLen=3;//默认起始里程
float perPrice;//每公里价格
float price;//总价
/**
* @param args
*/

public void setPrice()
{
int currHour=Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if(currHour>=7&&currHour<=23)
{
startPrice=10;
perPrice=1.2f;
}
else
{
startPrice=11;
perPrice=1.4f;
}
}

public void calc(int len)
{
//this.len=len;
setPrice();
if(len<=startLen)
price=startPrice;
else
price=startPrice+perPrice*(len-startLen);
price=(float)(Math.floor(price*100)/100);
price=Math.round(price);
}

public void show()
{
System.out.println("起价:"+startPrice);
System.out.println("起始公里"+startLen);
System.out.println("每公里价格"+perPrice);
System.out.println("里程:"+len);
System.out.println("===========================");
System.out.println("总价:"+price);
}

public static void main(String[] args)
{
// TODO Auto-generated method stub
CalcTaxi ta1=new CalcTaxi();
int len =0;

try
{
len=Integer.parseInt(args[0]);
}catch(NumberFormatException ee)
{
System.out.println("请输入合法的公里数");
System.out.println(ee);
return ;
}
ta1.calc(len);
ta1.show();
}

}
...全文
530 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Javahaoshuang3394 2008-05-15
  • 打赏
  • 举报
回复
我用eclipse测试了一下你写的程序,提示如下:
java.lang.ArrayIndexOutOfBoundsException: 0
at CalcTaxi.main(CalcTaxi.java:67)
你没有处理ArrayIndexOutOfBoundsException这个异常啊,而且没有指定len的大小(不过这个默认为零)
得出的结果是:
起价:11.0
起始公里3.0
每公里价格1.4
里程:0
===========================
总价:11.0
loaferwang 2008-05-15
  • 打赏
  • 举报
回复
public static void main(String[] args)
{
// TODO Auto-generated method stub
CalcTaxi ta1=new CalcTaxi();
int len =0;

try
{
len=Integer.parseInt(args[0]);
}catch(NumberFormatException ee)
{
System.out.println("请输入合法的公里数");
System.out.println(ee);
return ;
}
ta1.calc(len);
ta1.show();
}
仁兄呀,红色的是娄组吧,也就是你在传递时,传的是数组值呀!
还有就是你再看一下Integer.parseint(String kk)和Integer.parseInt(String kk,int mk);这两种吧,其它的是可以的呀,可以运行成功的;
胡矣 2008-05-15
  • 打赏
  • 举报
回复
运行时候出错了?
出错信息是什么?
带一个参数运行好像没问题吧。
anqini 2008-05-15
  • 打赏
  • 举报
回复
是不是这个异常java.lang.ArrayIndexOutOfBoundsException??
是的话,1楼说得对了!
shadowlin 2008-05-15
  • 打赏
  • 举报
回复
同意ls的意见,你的程序没有输入参数啊.可以用ls的方法或者加个system.in
blackhorsefeifei 2008-05-15
  • 打赏
  • 举报
回复
blackhorsefeifei 2008-05-15
  • 打赏
  • 举报
回复
又改了一遍,没问题了,谢谢大家!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;

public class CalcTaxi
{
static float len;// 行驶公里数
float startPrice;// 起价
float startLen = 3;// 默认起始里程
float perPrice;// 每公里价格
float price;// 总价

/**
* @param args
*/

public void setPrice()
{
int currHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if (currHour >= 7 && currHour <= 23)
{
startPrice = 10;
perPrice = 1.2f;
} else
{
startPrice = 11;
perPrice = 1.4f;
}
}

public void calc(float len)
{
this.len=len;
setPrice();
if (len <= startLen)
price = startPrice;
else
price = startPrice + perPrice * (len - startLen);
// price = (float) (Math.floor(price * 100) / 100);
// price = Math.round(price);
}

public void show()
{
System.out.println("起价:" + startPrice);
System.out.println("起始公里" + startLen);
System.out.println("每公里价格" + perPrice);
System.out.println("里程:" + len);
System.out.println("===========================");
System.out.println("总价:" + price);
}

public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub
CalcTaxi ta1 = new CalcTaxi();
float len = 0;

try
{
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader dr = new BufferedReader(in);
len = Integer.parseInt(dr.readLine());
} catch (NumberFormatException ee)
{
System.out.println("请输入合法的公里数");
System.out.println(ee);
return;
}
ta1.calc(len);
ta1.show();
}

}
loujianchengdd 2008-05-15
  • 打赏
  • 举报
回复
price = (float) (Math.floor(price * 100) / 100);
price = Math.round(price);
这两个什么意思啊?似乎多余阿。计算就不准确了。
blackhorsefeifei 2008-05-15
  • 打赏
  • 举报
回复
blackhorsefeifei 2008-05-15
  • 打赏
  • 举报
回复
把程序改了一下,用InputStreamReader输入。可以运行,但里程的显示好象仍然不对。


/**
* 出租车计费程序
* 7:00到23:00之间,起价10元,在3公里以内收取起价,超过3公里,超出的里程每公里收取1.2元。
* 如果不在这个时段,起价11元,在3公里以内收取起价,超过3公里,超出的里程每公里收取1.4元。
* 编写程序计算收费金额。要求:可以从命令行输入公里数,在程序中使用Java中现有的类,自动获取
* 系统时间,并将最终计算结果显示出来。
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;

public class CalcTaxi
{
static int len;// 行驶公里数
float startPrice;// 起价
float startLen = 3;// 默认起始里程
float perPrice;// 每公里价格
float price;// 总价

/**
* @param args
*/

public void setPrice()
{
int currHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if (currHour >= 7 && currHour <= 23)
{
startPrice = 10;
perPrice = 1.2f;
} else
{
startPrice = 11;
perPrice = 1.4f;
}
}

public void calc(int len)
{
// this.len=len;
setPrice();
if (len <= startLen)
price = startPrice;
else
price = startPrice + perPrice * (len - startLen);
price = (float) (Math.floor(price * 100) / 100);
price = Math.round(price);
}

public void show()
{
System.out.println("起价:" + startPrice);
System.out.println("起始公里" + startLen);
System.out.println("每公里价格" + perPrice);
System.out.println("里程:" + len);
System.out.println("===========================");
System.out.println("总价:" + price);
}

public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub
CalcTaxi ta1 = new CalcTaxi();
int len = 0;

try
{
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader dr = new BufferedReader(in);
len = Integer.parseInt(dr.readLine());
} catch (NumberFormatException ee)
{
System.out.println("请输入合法的公里数");
System.out.println(ee);
return;
}
ta1.calc(len);
ta1.show();
}

}

blackhorsefeifei 2008-05-15
  • 打赏
  • 举报
回复
运行时的错误:
java.lang.ArrayIndexOutOfBoundsException: 0
at jspUsefulExampleTutorial.CalcTaxi.main(CalcTaxi.java:68)
Exception in thread "main"
guoxiaopeng1982 2008-05-15
  • 打赏
  • 举报
回复
同意楼上的意见~~~~
bruni 2008-05-15
  • 打赏
  • 举报
回复
是不是因为你的程序运行时候需要输入一个参数?
试试把
len=Integer.parseInt(args[0]);
=>
len = 10;

然后直接运行.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧