问题如下:
import java.util.Scanner;
import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
public class Restaurant_system {
public static void main(String[] args) {
/**吃货联盟订餐系统
*/
/*数据存放体系,以及需要用到的功能 */
String[]name = new String[4]; //保存订餐人姓名
String[]dishMegs = new String[4];//保存所选信息,包括菜品名以及份数
int[]times = new int[4];//保存送餐时间
String[]addresses = new String[4];//保存送餐地址
int[]states = new int[4];//保存订单状态:0表示已经预定,1表示已经完成
double[]sumPrices1 = new double[4];//保存订单菜品金额
final double SEND_PRICES = 5.;
double[]sumPrices = new double[4];//保存订单的总金额
//boolean end = false; 本来是拿来结束整个do-while循环的,现在作废
String button;
Scanner input = new Scanner(System.in);
int choose;
do {
int check = 0;//检查
int check_ok = 0;//检查到餐袋内订单的数量
//程序初始化,打印菜单体系
System.out.println("欢迎使用“吃货联盟订餐系统”");
System.out.println("********************************************");
System.out.println("1、我要订餐");
System.out.println("2、查看餐袋");
System.out.println("3、签收订单");
System.out.println("4、删除订单");
System.out.println("5、我要点赞");
System.out.println("6、退出系统");
System.out.println("********************************************");
System.out.print("\n请选择:");
choose = input.nextInt(); //输入菜单选项
switch (choose) {
case 1:
System.out.println("***我要订餐***");
//先检查一下餐袋时候已经满了,如果已经满了,则无法点餐
for(;check < name.length;check++){//循环检查餐袋,看看有没有订单
if (name[check] !=null){//如果不是空
check_ok += 1;//订单数量加1
}else{//如果检查到订单数量为空,则进入点餐
break;
}
}
if (check_ok == 4) {//餐袋数量已满,终止点单
System.out.println("餐袋已满,无法点单。");
//返回菜单界面
}else{//餐单数量未满,进入点单
System.out.print("请输入订餐人姓名:");
name[check_ok] = input.next();//把名字放入姓名数组
System.out.println("序号\t菜名\t单价\t点赞数");
System.out.println("1\t红烧带鱼\t38.0\t0");
System.out.println("2\t鱼香肉丝\t20.0\t0");
System.out.println("3\t时令鲜蔬\t10.0\t0");
}
System.out.print("请选择您要点的菜品编号:");
int number = input.nextInt();
System.out.print("请输入您需要的份数:");
int copies = input.nextInt();
switch (number) {
case 1:
dishMegs[check_ok] = "红烧带鱼" +copies + "份";
sumPrices1[check_ok] = 38 * copies;
break;
case 2:
dishMegs[check_ok] = "鱼香肉丝" +copies + "份";
sumPrices1[check_ok] = 20 * copies;
break;
case 3:
dishMegs[check_ok] = "时令鲜蔬" +copies + "份";
sumPrices1[check_ok] = 10 * copies;
break;
default:
System.out.println("请输入1-3的数字");
break;
}
if (sumPrices1[check_ok] < 50) {
sumPrices[check_ok] = sumPrices1[check_ok] + SEND_PRICES;
}
System.out.println("请输入送餐时间(送餐时间是10点至20点之间的整点):");
boolean time_check_ok = true; //设置一个循环指令,如果输入的时间合理,则停止循环,否则就继续输入
do {
int time_check = input.nextInt();
if (time_check <= 20 && time_check>= 10) {
times[check_ok] = time_check;
time_check_ok = false;
}else {
System.out.println("请重新输入正确的送餐时间:");
}
} while(time_check_ok);
System.out.println("请输入送餐地址:");
addresses[check_ok] = input.next();
System.out.println("订餐成功!");
System.out.println("您订的是:" + dishMegs[check_ok]);
System.out.println("送餐时间:" + times[check_ok]);
System.out.println("送餐地址:" + addresses[check_ok]);
System.out.println("餐费:" + sumPrices1[check_ok] + "元,送餐费:" + SEND_PRICES + ",总计:" + sumPrices[check_ok] + "元。");
break;
case 2:
System.out.println("***查看餐袋***");
System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
for(;check < name.length;check++){//循环检查餐袋,看看有没有订单
if (name[check] !=null){//如果不是空
check_ok += 1;//订单数量加1
}else{//如果检查到订单数量为空,则计数完毕
break;
}
}
for (int serialNumber = 0; serialNumber < check_ok; serialNumber++) {
System.out.println((serialNumber+1) + "\t" + name[serialNumber] + "\t" + dishMegs[serialNumber] + "\t" +
times[serialNumber] + "\t" + addresses[serialNumber] + "\t" + sumPrices[serialNumber] + "\t" + states[serialNumber]);
}
break;
case 3:
System.out.println("签收");
break;
case 4:
System.out.println("删除");
break;
case 5:
System.out.println("点赞");
break;
case 6:
System.out.println("退出");
break;
default:
System.out.println("请输入1-6当中的数字");
break;
}
//System.out.print("输入y返回:");
//button = input.next();//这里有问题 还没有解决
} while (true );
//button.equals("y")
}
}
这个代码内容不是重点
重点是每次让我输入的时候
比如nextInt()
我输入一个1
经常给我报错:
网上查了一下,说是输入的类型和接收的类型不匹配,所以导致错误。
也就是说,很可能我输入的1,是系统以为我输入的是一个字符串的1 然后就崩掉了
老遇到这个问题,想问下各位大神到底是怎么解决这个问题的?