gpt4 book ai didi

java - "java.lang.ArrayIndexOutOfBoundsException"数组逻辑问题

转载 作者:行者123 更新时间:2023-12-01 13:27:53 25 4
gpt4 key购买 nike

现在的问题是我收到 java.lang.ArrayIndexOutOfBoundsException:

我已经摆弄了几个小时,不知道问题出在 SalesManager 还是 SalesAnaylzer 中。

我想做的是将数组值格式化为货币,并添加标签 Store 1.. 和 QTR 1... 我很确定我得到了 totalSaleshighestStoreSalesaverageStoreSales 正确这是我的代码:

 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)

最佳答案

我猜您使用的文件名中包含空格。 scan.next() 获取下一个由空格分隔的“标记”。例如,如果您的文件名是:C:\User\John Smith\Documents\file.ext,则 fileName 变量将仅包含 C:\User\约翰。相反,请使用 scan.nextLine() 获取 Enter 键之前的所有内容。

除非您用它发布完整的堆栈跟踪(异常输出的每一行错误),否则我们无法真正看到问题是什么,所以我将再次猜测问题可能是什么。

您可能使用没有完整路径的文件名,并且程序不知道在哪里找到它。

  • 如果您使用的是 IDE,该文件应与“src”和“classes”文件夹位于同一目录中。
  • 如果您使用命令行,请确保该文件位于您的“类路径”中。 JVM 在此处查找没有完整路径的文件名。这通常与您正在执行的 .class.jar 文件位于同一位置。

我想不出您的代码可能存在任何其他问题,如果我提到的任何内容都无法解决您的问题,请编辑您的主要帖子以包含完整的堆栈跟踪。

编辑:从对此答案的评论线程中,我们得出的结论是,用户遇到的问题是他们从文件名中排除了文件扩展名。 CompuDataSales 应该是 CompuDataSales.txt。遇到类似问题的其他用户应检查以确保文件名中存在扩展名。

关于java - "java.lang.ArrayIndexOutOfBoundsException"数组逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com