Java “线程中的异常”;主要的

Java “线程中的异常”;主要的,java,Java,我是Java新手(或者为了简单起见,对于任何编程语言),这就是我写的 3 public class Sample { 4 public static void main(String args[]){ 5 int month = Integer.parseInt(args[0]); 6 if (month == 12 || month == 1 || month==2){ 7 System.out.println("The season is Winter");

我是Java新手(或者为了简单起见,对于任何编程语言),这就是我写的

3 public class Sample {
4   public static void main(String args[]){
5   int month = Integer.parseInt(args[0]);
6       if (month == 12 || month == 1 || month==2){
7       System.out.println("The season is Winter");
8       }
9           elseif (month==3||month==4||month==5);
10          {
11          System.out.println("The season is Spring");
12          }
13          elseif (month==6||month==7||month==8);
14          {
15          System.out.println("The season is Summer");
16          }
17          elseif (month==9||month==10||month==11);
18          {
19          System.out.println("The season is Autmn");
20          }
21      else{
22      System.out.println("Wrong input entered");
23      }
24
25  }
26 }
此代码导致以下错误 线程“main”java.lang.ArrayIndexOutOfBoundsException中出现异常:0 位于Sample.main(Sample.java:5)

有人能帮我一下我在这里犯了什么错误导致它抛出错误吗


当您试图执行此代码时,应该传递一个参数

如果通过命令行执行此代码,请尝试以下操作:

java YourClassName 25
如果您使用的是Eclipse、IntelliJ或NetBeans等IDE,请参阅以下链接:


如果未传递任何参数,则
args
数组的长度为0,并且当您说
args[0]
时,您正试图访问不存在的第一个元素。这就是它抛出异常的原因。

您可能没有将月份作为程序参数传递。一旦你做到了,它应该会起作用


如果在命令行上运行它,则需要在命令中的类名之后提供它。IDE有用于运行配置的UI屏幕,它接受程序参数。

首先,您错误地初始化了数组,这是初始化12个大小的整数数组的方法之一

int[] month = new int[12];
然后,您得到的错误是由于越界,这意味着程序无法在错误初始化的变量
month
month中找到下一个整数

对于大小为的数组,月数组索引也以0开始,以11结束 十二,

这意味着它可以存储12个从0到11的数字。 希望它能帮助您进一步了解阵列:D

编辑: 确保在运行程序时已输入一个数字。 否则,您可以执行if语句来检查args是否为空

if(args.length!= 0){
//do this
month = Integer.parseInt(args[0]);
//...
}else{
      System.out.println("Wrong input entered");
}

尝试使用参数运行应用程序。如果您是从终端运行它,您可以通过
java MyApp 4
执行此操作,其中
MyApp
是您的应用程序名称,
4
是您的参数

如果您使用的是IDE,请查看运行配置

相反,如果您希望在应用程序运行后从用户处获取输入,请检查堆栈溢出


不要放弃。你会爱上Java一次,从而掌握基本知识。

如果你想获取当月的用户输入,你需要使用扫描仪。如果是这种情况,您需要
导入java.util.Scanner
导入它,然后声明扫描仪。为此,请键入
Scanner in=new Scanner(System.in)
。“System.in”是您的输入,在本例中是键盘。然后可以执行
int month=in.nextInt()
获取键盘上输入的下一个整数


如果我对你试图做的不正确,请给我发一条评论,我将编辑我的帖子,并尝试进一步帮助你。干杯

很可能
args
没有元素,因此
长度
0
,因此尝试访问任何元素将导致索引越界错误。尝试使用
if
语句确定
args
是否具有预期的元素数(
if(args.length==1){…}
)如何运行代码?如果在调用方法时,您应该从控制台传递一个参数,
$java sample 1
,因为此代码在很大程度上取决于您调用它的方式,因此有关您运行哪个命令来产生此错误的信息非常重要!请添加额外的上下文,以便我们能够更有效地提供帮助!您需要在运行程序时提供命令行参数。如果您正在使用cmd或terminal,则使用
java示例10
,然后,
args[0]
将是
10
。如果您使用的是IDE,那么请在项目的属性中提供命令行参数。他没有尝试初始化数组,只是获取main的第一个参数。它甚至不允许我编译程序。查看我提到的错误…这就是我在编译过程中得到的。当我试图在NetBeans上保存和运行时,也会出现同样的错误。@UdaiPratapSingh如果您在NetBeans上运行并编译,我认为问题出在这一行:int month=Integer.parseInt(args[0]);尝试将其更改为int[]month=new int[12];看看能不能用这也帮不了我。添加代码后,这是我在工具提示消息中看到的,在“if”“elseif”语句开始的相应行中;二元运算符“==”的错误操作数类型第一种类型:int[]第二种类型:int二元运算符的错误操作数类型“==”第一种类型:int[]第二种类型:int二元运算符的错误操作数类型“==”第一种类型:int[]第二种类型:int@UdaiPratapSingherm因为您只需要一个数据,所以需要[0]来检索第一个字段。试试这个。int[]month2=新int[12];整月=month2[0];我想我没能提供那一小段信息。。问题还不是通过运行代码,而是我无法编译这个程序本身。另外,当我在NetBeans上尝试它时,它也给出了错误。@UdaiPratapSingh无法编译该程序的原因是因为在尝试使用args[0]时出现了数组越界异常。在IDE中编译程序时,不能指定参数。我给你一个选择,以获得用户输入获得该月。如果要使用args[0],则需要从命令行编译代码并指定参数。