-5
我需要一些幫助,因爲我被困住了。 我剛剛在Java中製作了一個程序,它逐行讀取文件,進行一些計算並打印結果。例如,如果我在我的csv文件中有60行,它將打印60000個結果。問題是,當我有100行時它工作正常,當我有1000個時(此場合中的程序將打印100000個值),它只返回100000零。 會有什麼問題?Eclipse閱讀一個大文件不起作用 - Java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class WillemainApp {
static String delimiter = ",";
public static void main(String args[]) throws IOException {
BufferedReader br = null;
try {
String sCurrentLine;
// read the file and store each line in an object
br = new BufferedReader(new FileReader("C:\\Book2.csv"));
int [] Demand = new int[36];
int [] LeadTime = new int[1000];
List<Materials> materials = new ArrayList<Materials>();
List<LeadTimeDemand> lead = new ArrayList<LeadTimeDemand>();
while ((sCurrentLine = br.readLine()) != null) {
String [] fields = sCurrentLine.split(delimiter);
for (int i = 0; i < fields.length; i++) {
Demand[i] = Integer.parseInt(fields[i]);
if (Demand[i] < 0) {
Demand[i] = 0;
}
}
materials.add(new Materials(Demand));
}
for (Materials m :materials) {
for(int f = 0; f < LeadTime.length; f++) {
LeadTime[f] = 0;
}
// some preperations in order to define some parameters of the problem
double ZeroToZero = 0;
double ZeroToNonZero = 0;
double NonZeroToZero = 0;
double NonZeroToNonZero = 0;
int [] materialdemand = m.getDemand();
int countzero = 0;
for (int v =0; v < materialdemand.length; v++) {
if (materialdemand[v] >0) {
countzero++;
}
}
int NonZeroValues[] = new int [countzero];
int q = 0;
for(int e = 0; e < materialdemand.length; e++) {
if (materialdemand[e] != 0) {
NonZeroValues[q] = materialdemand[e];
q++;
}
}
int [] forecastsequence = new int [materialdemand.length];
for(int j = 0; j < materialdemand.length - 1; j++) {
if ((materialdemand[j] == 0) && (materialdemand[j + 1] == 0)) {
ZeroToZero = ZeroToZero + 1;
}
if ((materialdemand[j] == 0) && (materialdemand[j + 1] != 0)) {
ZeroToNonZero = ZeroToNonZero + 1 ;
}
if ((materialdemand[j] != 0) && (materialdemand[j + 1] == 0)) {
NonZeroToZero = NonZeroToZero + 1;
}
if ((materialdemand[j] != 0) && (materialdemand[j + 1] != 0)) {
NonZeroToNonZero = NonZeroToNonZero + 1;
}
}
double ZeroToZeroInterval = (ZeroToZero/(ZeroToZero + ZeroToNonZero)) * 100;
double ZeroToNonZeroInterval = (ZeroToNonZero/(ZeroToZero + ZeroToNonZero)) * 100;
double NonZeroToZeroInterval = (NonZeroToZero/(NonZeroToZero + NonZeroToNonZero)) * 100;
double NonZeroToNonZeroInterval = (NonZeroToNonZero/(NonZeroToZero + NonZeroToNonZero)) * 100;
if (ZeroToZeroInterval == ZeroToNonZeroInterval) {
ZeroToZeroInterval = ZeroToZeroInterval - 0.1;
}
if (NonZeroToZeroInterval == NonZeroToNonZeroInterval) {
NonZeroToZeroInterval = NonZeroToZeroInterval - 0.1;
}
double min = 0;
int kal = 0;
if (ZeroToZeroInterval < ZeroToNonZeroInterval) {
min = ZeroToZeroInterval;
} else {
min = ZeroToNonZeroInterval;
}
double min2 = 0;
if (NonZeroToZeroInterval < NonZeroToNonZeroInterval) {
min2 = NonZeroToZeroInterval;
} else {
min2 = NonZeroToNonZeroInterval;
}
while (kal <1000) {
forecastsequence[0] = materialdemand[0];
for (int w = 1; w < forecastsequence.length; w++) {
forecastsequence[w] = 0;
}
for (int z = 0; z < materialdemand.length - 1; z++) {
Random rn = new Random();
int random = rn.nextInt(101);
if (materialdemand[z] == 0) {
if ((random > min) && (min == ZeroToZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
if ((random > min) && (min == ZeroToNonZeroInterval)) {
forecastsequence[z + 1] = 0;
}
if ((random < min) && (min == ZeroToZeroInterval)) {
forecastsequence[z + 1] = 0;
}
if ((random < min) && (min == ZeroToNonZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
}
if (materialdemand[z] != 0) {
if ((random < min2) && (min2 == NonZeroToZeroInterval)) {
forecastsequence[z + 1] = 0;
}
if ((random < min2) && (min2 == NonZeroToNonZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
if ((random > min2) && (min2 == NonZeroToZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
if ((random >min2) && (min2 == NonZeroToNonZeroInterval)) {
forecastsequence[z + 1] = 0;
}
}
}
for (int p = 0; p < forecastsequence.length; p++) {
if (forecastsequence[p] != 0) {
int JITTERED = (int) (1 + forecastsequence[p] + 0.5 * Math.sqrt(forecastsequence[p]));
forecastsequence[p] = JITTERED;
}
}
int [] LeadTimeDemand = new int [forecastsequence.length - 1];
for (int ram = 0; ram < LeadTimeDemand.length; ram++) {
LeadTimeDemand[ram] = 0;
}
int sum = 0;
for (int d = 0; d < LeadTimeDemand.length;d++) {
LeadTimeDemand[d] = forecastsequence[d] + forecastsequence[d+1];
sum = sum + LeadTimeDemand[d];
}
LeadTime[kal] = sum;
kal++;
System.out.println(sum);
}
}
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
代碼必須有問題。 – eldo
你可以發佈文件的片段嗎?你爲什麼使用eclipse查看CSV? – SPlatten
代碼沒有問題。這是肯定的。當我有一個大文件時,它可以證明我的工作。 – Panos