java新手遇到的问题 第一个代码 过编译了 但是无法运行 显示实在switch方面出现了问题

import java.util.Scanner;
public class FlightTickets{
public static void main(String[] args){
	

    Scanner sc = new Scanner(System.in);
	{System.out.println("please input the date and individed the month and the day by','");}
    String date_1 =sc.nextLine();
    String [] date = date_1.split(",");
    int[] time = new int[2];
    for(int i=0;i<date.length;i++)
  {
	time[i]=Integer.parseInt(date[i]);        //著名输入算法
  }
    Scanner scan = new Scanner(System.in);
	{System.out.println("please input the amount of your tickets");}
    int amount = scan.nextInt();
    int price=0;
    switch(time[1]){
    case 1:
	    if(time[2]==1||time[2]==28)
		    price=1200;
	    else if(time[2]==7||time[2]==8||time[2]==14||time[2]==15||time[2]==21||time[2]==22||time[2]==29)
			price=1200*8/10;
	    else price=1200*6/10;
		break;
    case 2:
		if(time[2]==11)
		price=1200;
	    else if(time[2]==4||time[2]==5||time[2]==12||time[2]==18||time[2]==19||time[2]==25||time[2]==26)
			price=1200*8/10;
			else price=1200*6/10;
        break;
    case 3:
		if(time[2]==0)
		price=1200;
	    else if(time[2]==4||time[2]==5||time[2]==11||time[2]==12||time[2]==18||time[2]==19||time[2]==25||time[2]==26)
			price=1200*8/10;
			else price=1200*6/10;
        break;
    case 4:
		if(time[2]==4)
		price=1200;
	    else if(time[2]==1||time[2]==2||time[2]==8||time[2]==9||time[2]==15||time[2]==16||time[2]==22||time[2]==23||time[2]==29||time[2]==30)
			price=1200*8/10;
			else price=1200*6/10;
		break;
    case 5:
		if(time[2]==1||time[2]==30)
		   {price=1200;}
	    else if(time[2]==6||time[2]==7||time[2]==13||time[2]==14||time[2]==20||time[2]==21||time[2]==27||time[2]==28)
			price=1200 * 8 / 10;
			else price=1200 * 6 / 10;
		break;
    case 6:
		if(time[2]==0)
		price=1200;
	    else if(time[2]==3||time[2]==4||time[2]==10||time[2]==11||time[2]==17||time[2]==18||time[2]==24||time[2]==25)
			price=1200*8/10;
			else price=1200*6/10;
		break;
    case 7:
		if(time[2]==0)
		price=1200;
	    else if(time[2]==1||time[2]==2||time[2]==8||time[2]==9||time[2]==15||time[2]==16||time[2]==22||time[2]==23||time[2]==29||time[2]==30)
			price=1200*8/10;
			else price=1200*6/10;
		break;
    case 8:
		if(time[2]==0)
		price=1200;
	    else if(time[2]==5||time[2]==6||time[2]==12||time[2]==13||time[2]==19||time[2]==20||time[2]==26||time[2]==27)
			price=1200*8/10;
			else price=1200*6/10;
		break;
    case 9:
		if(time[2]==0)
		price=1200;
	    else if(time[2]==2||time[2]==3||time[2]==9||time[2]==10||time[2]==16||time[2]==17||time[2]==23||time[2]==24||time[2]==30)
			price=1200*8/10;
			else price=1200*6/10;
		break;
    case 10:
		if(time[2]==1||time[2]==4)
		price=1200;
	    else if(time[2]==7||time[2]==8||time[2]==14||time[2]==15||time[2]==21||time[2]==22||time[2]==28||time[2]==29)
			price=1200*8/10;
			else price=1200*6/10;
		break;
    case 11:
		if(time[2]==0)
		price=1200;
	    else if(time[2]==4||time[2]==5||time[2]==11||time[2]==12||time[2]==18||time[2]==19||time[2]==25||time[2]==26)
			price=1200*8/10;
			else price=1200*6/10;
		break;
    case 12:
		if(time[2]==0)
		price=1200;
	    else if(time[2]==2||time[2]==3||time[2]==9||time[2]==10||time[2]==16||time[2]==17||time[2]==23||time[2]==24||time[2]==30||time[2]==31)
			price=1200*8/10;
			else price=1200*6/10;
		break;
  }
	{System.out.println("the price is "+price * amount);}
		{System.out.println("\n");}
  }
}

time[2]的下标超出了长度,你的time数组是2个元素,应该是time[0],time[1],把2改为1就正常了。

JAVA0基础(QQ即时通讯软件项目实训):https://edu.csdn.net/course/detail/2981

解决方案:从21行开始,将time[2]改成time[1]。

解决原因:time是个数组,该数组的长度是2。但是数组的的下标是从0开始的,所以通过下标取值的范围是0到(数组长度-1),也就是取值只有time[0],time[1]。而你的代码从21行开始,用time[2]取值,因为数组中并没有这个值,所以会报数组越界的异常:java.lang.ArrayIndexOutOfBoundsException

如果有帮助请采纳,谢谢!

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y