1

私は問題があります。いくつかのテストを行ったところ、最初の 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();

    }
}
4

1 に答える 1

6

コード全体を調べたわけではありませんが、問題は確かにあなたの状態にあります。

for (int xx = 0; xx == 20; xx++)

このループは実際には次のようになります: -

for (int xx = 0; xx <= 20; xx++)

そうしないと、一度も実行されません。

また、あなたの配列: -

float[][] currentDataArray = new float[21][];

列数のサイズが必要です。それ以外の場合はNPE、行でアクセスすると次のようになります。

currentDataArray[xx][n] = input;
于 2012-11-18T19:59:25.480 に答える