通过这个程序,我读取并比较文本文件中给出的数字,并在数字连续三次上升时打印出“买入”,在数字连续三次下降时打印出“卖出”。
程序运行完美,但最后我得到了
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=14
和 con[14]
)时,没有 con[15]
可以将其进行比较。您应该在数组末尾之前迭代到 1。
关于java - Java中数组索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613327/