java - Java中数组索引越界

标签 java

通过这个程序,我读取并比较文本文件中给出的数字,并在数字连续三次上升时打印出“买入”,在数字连续三次下降时打印出“卖出”。

程序运行完美,但最后我得到了
java.lang.ArrayIndexOutOfBoundsException

我想要的是一种获取无限数字作为参数的方法,并且每次我想读取 txt 文件时不必更改数组编号([15])。

public class Practise1
{         
  public static void main(String [] args)
    throws IOException 
  {
    int num=0;
    String choice;
    int up=0;
    int down=0;
    int same=0;
    FileInputStream w = new FileInputStream("numbers.txt");
    Scanner scanner  = new Scanner(w);
    while(scanner.hasNextDouble())
    {
      Double [] con= new Double [15];
      for (int i=0; i<con.length; i++)
      {
        con[i]=scanner.nextDouble();
      }
      for (int a=0; a<con.length&&a<con.length; a++)
      {
        num++;
        System.out.print(num+"  "+(con[a]));
        if(con[a]<con[a+1])
        {
           up++;
        }
        else if(con[a]>con[a+1])
        {    
          down++;
        }
        else
        {
          same++;
        }
         if ((up >= 3 && (down > 1 || same >= 1)))
        {  
          System.out.print("  "+"sell");
          up=0;
          same=0;
        }
        else if ((down >= 3 && (up > 1 || same >= 1)))
        {
          System.out.print("  "+"buy");
          down=0;
          same=0;
        } 
        System.out.println();
      }
    }
    scanner.close();
  }
}

我得到的结果:

1  26.375
2  25.5
3  25.125
4  25.0
5  25.25  buy
6  27.125
7  28.25
8  26.0  sell
9  25.5
10  25.0
11  25.125  buy
12  25.25
13  26.375
14  25.5  sell
15  25.5

java.lang.ArrayIndexOutOfBoundsException: 15
at Practise1.main(Practise1.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

最佳答案

我认为你的问题在这里:

  for (int a=0; a<con.length&&a<con.length; a++)
  {
    num++;
    System.out.print(num+"  "+(con[a]));
    if(con[a]<con[a+1]) { 
       etc.

当您迭代数组时,您会将每个项目与列表中的下一个项目进行比较。当您到达第 15 项(a=14con[14])时,没有 con[15] 可以将其进行比较。您应该在数组末尾之前迭代到 1。

关于java - Java中数组索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613327/

相关文章:

java - 如何在 Selenium 3.6 中使用 IE11 执行 Shift 点击

java - 在 ArrayList<String> 中使用 .contains 出错

java - JPA - 如何在 postgres 文本数组中查找字符串列表

java - 从字符串中删除所有以 char '[' 开头并以 char ']' 结尾的正则表达式实例

java - Struts2 验证还是 HTML5 验证?

java - 如何在 java 中清除 BufferedReader

java - Spring中是先创建bean还是先通过构造函数创建实例

java - 很难理解Android C2DM

Java 字节码子例程 - 无法加载返回地址

java - sql - 创建单个查询以获取给定条件的值