Java 编译后的程序在第一个“for”循环中停止

Java 编译后的程序在第一个“for”循环中停止,java,loops,for-loop,execution,Java,Loops,For Loop,Execution,我有个问题。我做了两个测试,发现我的程序在第一个for循环之后就停止了。我不知道为什么。我以前有一个较小的程序,读写一个文件,它工作得很好。程序将编译,text.txt文件位于正确的位置 我用的是Bluej。需要其他细节吗?请问 import java.io.*; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.lang.reflec

我有个问题。我做了两个测试,发现我的程序在第一个for循环之后就停止了。我不知道为什么。我以前有一个较小的程序,读写一个文件,它工作得很好。程序将编译,text.txt文件位于正确的位置

我用的是Bluej。需要其他细节吗?请问

import java.io.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.lang.reflect.Array;
import java.util.Scanner;

import javax.swing.*;

public class fileStreamTest{

    public static void main(String args[]){
        float averageprice;
        float[] prevDataArray= new float[22];
        float[][] currentDataArray = new float[21][];
        float[] futureData= new float[7];

        Scanner keyboard = new Scanner(System.in);
        System.out.println("start");

        if (true)//prevDataArray[1]!=7
        {
            for (int xx = 0; xx == 20; xx++)
            {
                int n = 0;
                float input = 0;
                double q1, q3;

                //input data 
                System.out.println("Input data, input 0.00407 to finish.");
                while(input!=0.00407)
                {
                    if (input == 0)
                        input = keyboard.nextFloat();
                    currentDataArray[xx][n] = input;
                    input = keyboard.nextFloat();
                    n++;
                }

                //delete outliers
                n = 0; 

                if((int)(currentDataArray.length/2) == currentDataArray.length/2)
                {
                    if((int)((currentDataArray.length-currentDataArray.length/2)/2) == currentDataArray.length/4)
                    {
                        q1 = (currentDataArray[xx][currentDataArray.length/4]+currentDataArray[xx][currentDataArray.length/4+1])/2;
                        q3 = (currentDataArray[xx][3*currentDataArray.length/4]+currentDataArray[xx][3*currentDataArray.length/4+1])/2;
                    }
                    else
                    {
                        q1 = currentDataArray[xx][(int)(currentDataArray.length/4) + 1];
                        q3 = currentDataArray[xx][(int)(3*currentDataArray.length/4) + 1];
                    }
                }
                else
                {
                    if((int)((int)(currentDataArray.length/2)/2) == (int)(currentDataArray.length/2)/2)
                    {
                        q1 = (currentDataArray[xx][(int)(currentDataArray.length/2)/2] +  currentDataArray[xx][(int)(currentDataArray.length/2)/2 + 1])/2;
                        q3 = (currentDataArray[xx][3*(int)(currentDataArray.length/2)/2+1] + currentDataArray[xx][3*(int)(currentDataArray.length/2)/2 + 2])/2;
                    }
                    else
                    { 
                        q1 = currentDataArray[xx][(int)((int)(currentDataArray.length/2)/2) + 1];
                        q3 = currentDataArray[xx][(int)(3*(int)(currentDataArray.length/2)/2)+ 1];
                    }
                }
                System.out.println("q1 = " + q1 + "/n" + ",q3 = " + q3);
                float sum = 0;
                n = 0;
                while(n!=currentDataArray.length)
                {
                    if((currentDataArray[xx][n] >= q1) && (currentDataArray[xx][n] <= q3))
                    {
                        sum += currentDataArray[xx][n];
                        n++;   
                    }
                }
                //finding average price
                averageprice = sum/n;
                System.out.println(" Average price = " + averageprice);
                //write currentDataFile
                try{
                    OutputStream os = new FileOutputStream("C:/test.txt");
                    for(int x=0; x < currentDataArray[xx].length ; x++){
                        os.write( (byte)currentDataArray[xx][x] ); // writes the bytes
                    }
                    os.close();
                }catch(IOException e){
                    System.out.print("Exception");
                } 
            }
            prevDataArray[0]++;
        }
        else
        {
            //drawbg
            //drawList
            //createfuturedata(avgdev)
            //drawPred(futuredata)
            //updateavgdev
            System.out.println("test");
            prevDataArray[0] = 1;
        }

        //InputStream is = new FileInputStream("C:/test.txt");
        //int size = is.available();

        //  for(int i=0; i< size; i++){
        //     System.out.print((double)is.read() + "  ");
        // }
        //  is.close();

    }
}

我还没有看完你的全部代码,但问题肯定出在你的情况下

for (int xx = 0; xx == 20; xx++)
这个循环应该是:-

for (int xx = 0; xx <= 20; xx++)
需要列数的大小,否则当您在以下行中访问NPE时,将获得NPE:

currentDataArray[xx][n] = input;

我还没有看完你的全部代码,但问题肯定出在你的情况下

for (int xx = 0; xx == 20; xx++)
这个循环应该是:-

for (int xx = 0; xx <= 20; xx++)
需要列数的大小,否则当您在以下行中访问NPE时,将获得NPE:

currentDataArray[xx][n] = input;

请在发布前正确设置代码格式。您在键入位置下方有一个预览,在那里您可以看到代码的外观。程序的输出是:开始控制台中应显示的下一个内容是:输入数据。。。但它不能做到这一点。请先阅读for循环是如何工作的!请在发布前正确设置代码格式。您在键入位置下方有一个预览,在那里您可以看到代码的外观。程序的输出是:开始控制台中应显示的下一个内容是:输入数据。。。但它不能做到这一点。请先阅读for循环是如何工作的!