&引用;java.lang.ArrayIndexOutOfBoundsException“;阵列逻辑问题
现在的问题是我正在获取java.lang.ArrayIndexOutOfBoundsException: 我已经摆弄了几个小时,不知道问题出在&引用;java.lang.ArrayIndexOutOfBoundsException“;阵列逻辑问题,java,arrays,file,class,methods,Java,Arrays,File,Class,Methods,现在的问题是我正在获取java.lang.ArrayIndexOutOfBoundsException: 我已经摆弄了几个小时,不知道问题出在SalesManager还是SalesAnaylzer中 我试图做的是将数组值格式化为money,并添加标签store1。。qtr1。。。我很确定我得到的总销售额,最高商店销售额,和平均商店销售额都是正确的 这是我的密码: import java.io.File; import java.text.DecimalFormat; import java
SalesManager
还是SalesAnaylzer
中
我试图做的是将数组值格式化为money,并添加标签store1。。qtr1。。。我很确定我得到的总销售额
,最高商店销售额
,和平均商店销售额
都是正确的
这是我的密码:
import java.io.File;
import java.text.DecimalFormat;
import java.util.Scanner;
import java.io.IOException;;
public class SalesManager
{
public static void main( String []args) throws IOException
{
System.out.println(" What is the name of the file");
Scanner scan= new Scanner(System.in);
String fileName= scan.next();
SalesAnaylzer sA = new SalesAnaylzer(fileName);
/*System.out.println(data);
System.out.println("Here are the stores' sales for the past four quarters:" +
"/n" + data);
System.out.println("The total sales were:" + total);
System.out.println("The highest quarterly sales were:" + highest);
System.out.println("The average quarterly sales were:" + avg);*/
}
}
下面是这个类文件:
import java.io.File;
import java.text.DecimalFormat;
import java.util.Scanner;
import java.io.IOException;
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class SalesAnaylzer
{
DecimalFormat pricePattern= new DecimalFormat("$#0.00");
int [][]sales= new int [3][4];
public SalesAnaylzer(String fileName)throws IOException
{
File inputFile= new File(fileName);
Scanner scan= new Scanner(inputFile);
for (int row=0; row<4; row++){
for (int col=0; col<6; col++){
sales [row][col]= scan.nextInt();
}
}
}
public String toString()
{
String data = "";
for (int row=0; row<4; row++){
data =data +"\nStore "+(row+1)+": ";
for (int col=0; col<6; col++){
data =data + "QTR "+(col+1)+": "+pricePattern.format(sales[row][col])+" ";
}
}
return data;
}
public double totalSales()
{
double total=0.0;
for (int row=0; row<4; row++){
for (int col=0; col<6; col++){
total= total + sales[row][col];
}
}
return total;
}
public double highStoreSales(int store)
{
double highest=0.0;
for (int row=0; row<4; row++){
if(sales[row][store]> highest)
highest =sales[row][store];
}
return highest;
}
public double averageStoreSales(int quarter)
{
double total=0.0;
double avg=0.0;
for (int col=0; col<6; col++){
total=total+sales[quarter][col];
}
avg=(total/4);
return avg;
}
}
java.io.FileNotFoundException: CompuDataSales (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at SalesManager.main(SalesManager.java:16)
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)
导入java.io.File;
导入java.text.DecimalFormat;
导入java.util.Scanner;
导入java.io.IOException;
导入java.util.*;
导入javax.swing.*;
导入java.awt.*;
公共级SalesAnayzer
{
DecimalFormat pricePattern=新的DecimalFormat($#0.00”);
int[][]销售额=新int[3][4];
公共SalesAnaylzer(字符串文件名)引发IOException
{
文件输入文件=新文件(文件名);
扫描仪扫描=新扫描仪(输入文件);
对于(int row=0;row我猜您使用的文件名中有空格。scan.next()
使用下一个“标记”它由空格分隔。如果您的文件名是例如:C:\User\John Smith\Documents\file.ext
,则fileName
变量将只包含C:\User\John
。相反,请使用scan.nextLine()
获取所有内容,直到Enter
键
除非您发布完整的stacktrace(异常的每一行错误输出),否则我们无法确切地看到问题所在,因此我将再次猜测问题所在
您可能使用的文件名没有完整路径,程序不知道在哪里可以找到它
- 如果您使用的是IDE,则该文件应位于与“src”和“classes”文件夹相同的目录中
- 如果使用命令行,请确保文件位于“类路径”中。JVM在这里查找没有完整路径的文件名。这通常与正在执行的
.class
或.jar
文件位于同一位置
我想不出你的代码还有什么问题,如果我没有提到任何东西可以解决你的问题,请编辑你的主要帖子以包含完整的stacktrace
编辑:从这个答案的评论线程中,我们得出结论,用户遇到的问题是他们从文件名中排除了文件扩展名。CompuDataSales
应该是CompuDataSales.txt
。其他有类似问题的用户应该检查以确保扩展名存在n文件名。尝试用实际的文件路径替换fileName
变量,看看是否有效。我需要用户输入文件名,这样文件名就永远不会是原来的文件名。文件名可能有空格吗?但文件应该位于哪里?在某个目录中?您的代码似乎正在读取一个错误工作目录中的文件,除非它包含完整路径。您可以使用新文件(目录,文件名)
并且有一个你知道该文件所在的目录。是的,该文件位于同一目录中。文件名为:CompuDataSales,因此其中没有空格。该文件是否有扩展名,如.txt
或.doc
?在windows上,你应该修改文件夹选项,以便随时显示文件扩展名。是的,它是一个.txt文件我甚至输入了用户输入,自己调用了文件,得到了相同的结果。文件名应该是CompuDataSales.txt
,而不仅仅是CompuDataSales
。扩展名虽然默认情况下隐藏在Windows上,但仍然是文件全名的一部分。你说你已经输入了CompuDataSales
,但是然后说是一个.txt
。不清楚,对不起。你在用IDE吗?