Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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的问题是将文本文件的内容放入数组,然后显示和操作数组的内容_Java_Arrays_Inputstream - Fatal编程技术网

Java的问题是将文本文件的内容放入数组,然后显示和操作数组的内容

Java的问题是将文本文件的内容放入数组,然后显示和操作数组的内容,java,arrays,inputstream,Java,Arrays,Inputstream,好吧,这是一个学校项目,我似乎不知道我做错了什么,我意识到有更好的方法来做这件事,但必须这样做(我会特别注意什么) 我需要写两个非常简单的程序 第一个程序创建一个包含300个1到54范围内的随机整数的文件,然后打印到一个文本文件中 第二个程序读取该文本文件并将内容放入数组。然后对数组进行操作,以输出一些内容、数字的平均值以及数字在特定范围内出现的次数。我还试图立即输出整个阵列。不幸的是,所有的部分基本上都不起作用,或者我不理解一些事情,我很确定这两者都是lol 方案1如下: import jav

好吧,这是一个学校项目,我似乎不知道我做错了什么,我意识到有更好的方法来做这件事,但必须这样做(我会特别注意什么)

我需要写两个非常简单的程序

  • 第一个程序创建一个包含300个1到54范围内的随机整数的文件,然后打印到一个文本文件中

  • 第二个程序读取该文本文件并将内容放入数组。然后对数组进行操作,以输出一些内容、数字的平均值以及数字在特定范围内出现的次数。我还试图立即输出整个阵列。不幸的是,所有的部分基本上都不起作用,或者我不理解一些事情,我很确定这两者都是lol

  • 方案1如下:

    import java.util.*;
    import java.io.*;
    public class OutStream{ 
    public static void main(String[] args){
    int Counter = 0,
        Value;
    Random Gen = new Random();
    System.out.println("Generating Numbers and Text File Now");
       try{
            File out = new File("F:\\Text.txt");
            PrintWriter P = new PrintWriter(out);
            while(Counter <= 300){
                Value = Gen.nextInt(54)+1;
                P.println(Value);
                ++Counter;
                System.out.println("Value: " + Value);
            } 
            P.close();
      }catch(Exception E){ 
      E.printStackTrace();
      System.out.println(E.getMessage());
      } 
      System.out.println("The Program has ended");
     }   
    }
    

    文本文件1-54中有300个数字,这些数字重复的方式不同,但通常是10-50次,正如你在上面看到的那样,它只显示了一次,这让我相信我没有正确地增加一些东西。

    我认为这里有很多令人困惑的事情。。。下面是答案,但我建议您尝试自己调试此代码段,以了解错误

  • 您正在通过一个包含
    301
    单元格的数组进行迭代。数组索引从
    0
    length-1
    。当posNum被初始化为0时,当您使用
    numaray[++posNum]
    时,第一个索引将是
    ++0=1
    。所以你永远不会到达数组的第一个单元格。这会导致
    超出范围异常
    ,因为最后一个索引将是
    301
    ,但实际上最后一个索引是
    300
    。。。只要阅读异常消息就可以找到解决方案

  • 我建议您看看
    for循环的工作原理,了解如何使用递增索引逐个单元格浏览数组。然后,您将按如下方式更正for循环:

    for(int idx=0;idx
  • 您使用错误的变量访问当前单元格。这可以附加,但您在调试模式下会很快检测到它

    努马拉伊[idx]

  • 而不是

    NumArray[Range1]
    
  • 这对于使您的程序正常运行不是必需的,但是在Java中有一些约定(就像在每种语言中一样),并且
    变量
    是用
    camelCase
    编写的

    公共班入流{

    public static void main(String[] args) {
        int [] NumArray = new int[301];
        int PosNum = 0,
            Total = 0,
            Average = 0,
            Range1 = 0,
            Range2 = 0,
            Range3 = 0,
            Range4 = 0,
            Range5 = 0,
            Range6 = 0;
    
        try{
            File Fout = new File("F:\\Text.txt");
            PosNum = 0;
            Scanner Fin = new Scanner(Fout);
            while(Fin.hasNextInt()){
                NumArray[PosNum++] = Fin.nextInt();
            }
            Fin.close();
    
        }catch(Exception E){
            E.printStackTrace();
            System.out.println("***ERROR ***** " + E.getMessage());
        }
    
    
        for(int idx = 0; idx < NumArray.length; idx++){
            Total += NumArray[idx];
    
            if(NumArray[idx] >= 1 && NumArray[idx] <= 10){
                Range1++;
            }
    
            if (NumArray[idx] >= 11 && NumArray[idx] <= 20){
                Range2++;
            }
            if(NumArray[idx] >= 21 && NumArray[idx] <= 30){
                Range3++;
            }
            if(NumArray[idx] >= 31 && NumArray[idx] <= 40){
                Range4++;
            }
            if(NumArray[idx] >= 41 && NumArray[idx] <= 50){
                Range5++;
            }
            if(NumArray[idx] >= 51 && NumArray[idx] <= 54){
                Range6++;
            }
        }
        Average = Total / 301;
        System.out.println("The Average Is: " + Average);
        System.out.println(" 1 Through 10 appear: " + Range1 + " Times");
        System.out.println("11 Through 20 appear: " + Range2 + " Times");
        System.out.println("21 Through 30 appear: " + Range3 + " Times");
        System.out.println("31 Through 40 appear: " + Range4 + " Times");
        System.out.println("41 Through 50 appear: " + Range5 + " Times");
        System.out.println("51 Through 54 appear: " + Range6 + " Times");
    }
    
    publicstaticvoidmain(字符串[]args){
    int[]numaray=新int[301];
    int PosNum=0,
    总计=0,
    平均值=0,
    范围1=0,
    范围2=0,
    范围3=0,
    范围4=0,
    范围5=0,
    范围6=0;
    试一试{
    File Fout=新文件(“F:\\Text.txt”);
    PosNum=0;
    扫描仪Fin=新扫描仪(Fout);
    while(Fin.hasNextInt()){
    NumArray[PosNum++]=Fin.nextInt();
    }
    Fin.close();
    }捕获(例外E){
    E.printStackTrace();
    System.out.println(“***错误*****”+E.getMessage());
    }
    for(int idx=0;idx如果(NumArray[idx]>=1&&NumArray[idx]=11&&NumArray[idx]=21&&NumArray[idx]=31&&NumArray[idx]=41&&NumArray[idx]=51&&NumArray[idx]您需要演示确切的问题是什么,输入和预期输出,以及您为调试该问题所做的工作。我同意@SkinnyJ的说法,您对到底发生了什么还不够清楚。此外,当您说必须以这种方式完成时,您的意思是什么?我认为有更好的方式来读取和写入这些文件包括BufferedReader和Writer而不是Scanner类。你能澄清一下吗?我已经按照上面在程序顶部和源代码底部所述做了。1.我需要找到该区域中包含的平均数字。2.我需要显示数字1-10 11-20 21-30 31-40等重复的次数。I'v我尝试了很多不同的东西,我不会去购物中心,因为这不相关。我会在一封邮件中发布最新的尝试“必须这样做”这是很自然的解释,这是一个学校项目,这意味着我的设计方式就是它必须被提交的方式。显然错误必须被修复,我正在尝试这样做。我不是在找你来重新编写我的源代码,我在找一个正确的方向。谢谢你,Miam84,我很沮丧,因为e我的第一个版本看起来像这样,但有几个例外,例如我使用了.length()的新版本但我的印象是它只适用于字符串,我错了!我还想指出,理解数组越界异常是很清楚的,我确实理解了如何解决它,我还说我正在重新编写它。我主要是在修复前和修复后的增量java方面有问题,还需要更多的当我已经习惯了并且我正处于学习的开始阶段时,仅仅几天的时间就证明了它的有效性。那么现在你可以更进一步了;)当这个答案解决了你的问题时,你可以用复选标记将它设为已被接受。这将把问题标记为已解决
    
    The Average Is: 27
    The Numbers 1 Through 10 appear: 1 Times
    The Numbers 11 Through 20 appear: 1 Times
    The Numbers 21 Through 30 appear: 1 Times
    The Numbers 31 Through 40 appear: 1 Times
    The Numbers 41 Through 50 appear: 1 Times
    The Numbers 51 Through 54 appear: 1 Times
    
    NumArray[Range1]
    
    public static void main(String[] args) {
        int [] NumArray = new int[301];
        int PosNum = 0,
            Total = 0,
            Average = 0,
            Range1 = 0,
            Range2 = 0,
            Range3 = 0,
            Range4 = 0,
            Range5 = 0,
            Range6 = 0;
    
        try{
            File Fout = new File("F:\\Text.txt");
            PosNum = 0;
            Scanner Fin = new Scanner(Fout);
            while(Fin.hasNextInt()){
                NumArray[PosNum++] = Fin.nextInt();
            }
            Fin.close();
    
        }catch(Exception E){
            E.printStackTrace();
            System.out.println("***ERROR ***** " + E.getMessage());
        }
    
    
        for(int idx = 0; idx < NumArray.length; idx++){
            Total += NumArray[idx];
    
            if(NumArray[idx] >= 1 && NumArray[idx] <= 10){
                Range1++;
            }
    
            if (NumArray[idx] >= 11 && NumArray[idx] <= 20){
                Range2++;
            }
            if(NumArray[idx] >= 21 && NumArray[idx] <= 30){
                Range3++;
            }
            if(NumArray[idx] >= 31 && NumArray[idx] <= 40){
                Range4++;
            }
            if(NumArray[idx] >= 41 && NumArray[idx] <= 50){
                Range5++;
            }
            if(NumArray[idx] >= 51 && NumArray[idx] <= 54){
                Range6++;
            }
        }
        Average = Total / 301;
        System.out.println("The Average Is: " + Average);
        System.out.println(" 1 Through 10 appear: " + Range1 + " Times");
        System.out.println("11 Through 20 appear: " + Range2 + " Times");
        System.out.println("21 Through 30 appear: " + Range3 + " Times");
        System.out.println("31 Through 40 appear: " + Range4 + " Times");
        System.out.println("41 Through 50 appear: " + Range5 + " Times");
        System.out.println("51 Through 54 appear: " + Range6 + " Times");
    }