Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;java.lang.ArrayIndexOutOfBoundsException“;阵列逻辑问题_Java_Arrays_File_Class_Methods - Fatal编程技术网

&引用;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

现在的问题是我正在获取java.lang.ArrayIndexOutOfBoundsException:

我已经摆弄了几个小时,不知道问题出在
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吗?