Array throws NullPointerException in Java - java
I have the following little problem... I have this code that uses the method OpenFile() of one class ReadData to read a .txt file and also I have another class ArraysTZones used to create an object that stores 3 arrays (data1,data2,data3) and 3 integers (total1,total2,total3) returned by the method OpenFile(). The problem is that when I try to display each array (data1,data2,data3) using the method getArray() of ArrayTZones it stops and displays the error NullPointerException. Anyone knows how could I fix this?
public static void main (String args[]) throws IOException {
String fileName = ".//data.txt";
int[] def = new int[180];
try {
ReadData file = new ReadData(fileName);
ArraysTZones summaryatz = new ArraysTZones();
summaryatz = file.OpenFile();
for (int i = 0; i < 180; i++)
System.out.print (summaryatz.getArray1()[i] + " ");
System.out.println ("");
System.out.println (summaryatz.getTotal1());
for (int i = 0; i < 180; i++)
System.out.print (summaryatz.getArray2()[i] + " ");
System.out.println ("");
System.out.println (summaryatz.getTotal2());
for (int i = 0; i < 180; i++)
System.out.print (summaryatz.getArray3()[i] + " ");
System.out.println ("");
System.out.println (summaryatz.getTotal3());
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
Heres OpenFile()
public ArraysTZones OpenFile() throws IOException {
FileReader reader = new FileReader(path);
BufferedReader textReader = new BufferedReader(reader);
int numberOfTimeZones = 3;
int[] data1 = new int[180];
int[] data2 = new int[180];
int[] data3 = new int[180];
int total1 = 0;
int total2 = 0;
int total3 = 0;
ArraysTZones atz = new ArraysTZones();
for (int i = 0; i < numberOfTimeZones; i++){
if (i == 0) {
String firstTimeZone = textReader.readLine();
String[] val = firstTimeZone.split ("\\s+");
for (int u = 0; u < val.length; u++)
{
int stats = (int)(Math.ceil(Math.abs(Double.parseDouble(val[u]))));
total1 += stats;
data1[u] = stats;
}
total1= total1/180;
atz.setTotal1(total1);
atz.setArray1(data1);
}
else
if (i == 1) {
String secondTimeZone = textReader.readLine();
String[] val = secondTimeZone.split ("\\s+");
for (int u = 0; u < val.length; u++)
{
int stats = (int)(Math.ceil(Math.abs(Double.parseDouble(val[u]))));
total2 += stats;
data2[u] = stats;
}
total2= total2/180;
atz.setTotal2(total2);
atz.setArray2(data2);
}
else {
String thirdTimeZone = textReader.readLine();
String[] val = thirdTimeZone.split ("\\s+");
for (int u = 0; u < val.length; u++)
{
int stats = (int)(Math.ceil(Math.abs(Double.parseDouble(val[u]))));
total3 += stats;
data3[u] = stats;
}
total3= total3/180;
atz.setTotal3(total3);
atz.setArray3(data3);
}
}
textReader.close();
return atz;
}
The getArray()
public int[] getArray1 () {
return data1;
}
And setArray()
public void setArray1 (int[] farray) {
int[] data1 = new int[180];
//int[] farray = new int[180];
data1 = farray;
}
The problem seems to be here
public void setArray1 (int[] farray)
{
int[] data1 = new int[180];
//int[] farray = new int[180];
data1 = farray;
}
You're declaring a new variable called data1 and storing the content of farray to it.
After that method is done, that variable will be removed, due to his scope.
Remove int[] from the line int[] data1 = new int[180]; (or just remove the whole line .. it is unnecessary) and your data will be stored in the correct variable that was declared for the class.
public void setArray1 (int[] farray) {
data1 = farray;
}
You have to initialize ArraysTZones
Related
Accuracy of Multi Layer Neural Network using Backpropagation around 86% normal?
Recently, I started trying to train a neural network using backpropagation. The network structure is 784-512-10, and I used the Sigmoid activation function. When I tested a single-layer network on the MNIST dataset, I got around 90%. My results are around 86% with this multi-layer network, is this normal? Did I get the backpropagation part wrong? Here is my code: import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.security.SecureRandom; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class NeuralNetwork{ public static double learningRate = 0.01; public static int epoch = 15; public static int ROWS = 28; public static int COLUMNS = 28; public static int INPUT = ROWS * COLUMNS; public static int outNum = 10; public static int hiddenNum = 512; public static double[][] weights2 = new double[outNum][hiddenNum]; public static double[] bias2 = new double[outNum]; public static double[][] weights1 = new double[hiddenNum][INPUT]; public static double[] bias1 = new double[outNum]; private static final double TRAININGSIZE = 10; public static double[][] inputs = new double[outNum][INPUT]; private static final double[][] target = new double[outNum][outNum]; private static final ArrayList<String> filenames = new ArrayList<>(); private static final ArrayList<Integer> yetDone = new ArrayList<>(); public static double[] actual = new double[outNum]; public static Random rand = new SecureRandom(); public static Scanner input = new Scanner(System.in); public static void main(String[]args) throws Exception { System.out.println("1. Learn the network"); System.out.println("2. Guess a number"); System.out.println("3. Guess file"); System.out.println("4. Guess All Numbers"); System.out.println("5. Guess image"); switch (input.nextInt()){ case 1: learn(); break; case 2: guess(); break; case 3: guessFile(); break; case 4: guessAll(); break; } } public static void guessAll() throws IOException, ClassNotFoundException { System.out.println("Recognizing..."); /* for(int x = 1; x < 60000; x++){ filenames.add("data/" + String.format("%05d",x) + ".txt"); } ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("network.ser"))); Layers lay = (Layers) ois.readObject(); int correct = 0; for (String z : filenames) { double[] a = scan(z,0); correct += getBestGuess(sigmoid(lay.step(a))) == actual[0] ? 1 : 0; } System.out.println("Training: " + correct + " / " + filenames.size() + " correct."); filenames.clear(); */ for(int x = 60000; x < 70000; x++){ filenames.add("data/" + String.format("%05d",x) + ".txt"); } ObjectInputStream oiss = new ObjectInputStream(new BufferedInputStream(new FileInputStream("network1.ser"))); Layers lays1 = (Layers) oiss.readObject(); ObjectInputStream oiss2 = new ObjectInputStream(new BufferedInputStream(new FileInputStream("network2.ser"))); Layers lays2 = (Layers) oiss2.readObject(); int corrects = 0; for (String z : filenames) { double[] a = scan(z,0); corrects += getBestGuess(sigmoid(lays2.step(sigmoid(lays1.step(a))))) == actual[0] ? 1 : 0; } System.out.println("Testing: " + corrects + " / " + filenames.size() + " correct."); System.out.println("Done!"); } public static void makeList(){ for(int index = 0; index < TRAININGSIZE; index++){ int indices = rand.nextInt(yetDone.size() - 1) + 1; filenames.add("data/" + String.format("%05d",yetDone.get(indices)) + ".txt"); yetDone.remove(indices); } prepareData(); for(int indices = 0; indices < outNum; indices++) { for(int index = 0; index < outNum; index++){ target[indices][index] = 0; } target[indices][(int)actual[indices]] = 1; } } public static void prepareData(){ for(int index = 0; index < outNum; index++){ try { inputs[index] = scan(filenames.get(index), index); } catch (FileNotFoundException ex) { ex.printStackTrace(); } } } public static double[] scan(String filename, int index) throws FileNotFoundException { Scanner in = new Scanner(new File(filename)); double[] a = new double[INPUT]; for(int i = 0; i < INPUT; i++){ a[i] = in.nextDouble() / 255; } actual[index] = in.nextDouble(); return a; } public static void guessFile() throws IOException, ClassNotFoundException { System.out.print("Enter Filename: "); double[] a = scan(input.next(), 0); ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("network.ser"))); Layers lay = (Layers) ois.readObject(); double[] results = lay.step(a); System.out.println("This is a " + getBestGuess(sigmoid(results)) + "!"); System.out.println(Arrays.toString(results)); } public static double guess(double[] a) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("network.ser"))); Layers lay = (Layers) ois.readObject(); double[] results = lay.step(a); return getBestGuess(sigmoid(results)); } public static void guess() throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("network.ser"))); System.out.println("Input number: "); Layers lay = (Layers) ois.readObject(); double[] a = new double[INPUT]; for(int index = 0; index < a.length; index++){ a[index] = input.nextInt(); } double[] results = lay.step(a); System.out.println("This is a " + getBestGuess(sigmoid(results)) + "!"); System.out.println(Arrays.toString(sigmoid(results))); } public static void learn() { System.out.println("Learning..."); initialise(weights2, outNum, hiddenNum); initialise(bias2); initialise(weights1,hiddenNum, INPUT); initialise(bias1); Layers lay2 = new Layers(weights2, bias2, outNum, hiddenNum); Layers lay1 = new Layers(weights1, bias1, hiddenNum, INPUT); double[] result2 = new double[lay2.outNum]; double[] result1 = new double[lay1.outNum]; double[] a2; double[] a1; double cost = 0; double sumFinal; for(int x = 0; x < epoch; x++) { yetDone.clear(); for(int y = 0; y < 60000; y++){ yetDone.add(y); } for (int ind = 0; ind < 200; ind++) { filenames.clear(); makeList(); for (int n = 0; n < lay2.outNum; n++) { a1 = inputs[n]; //number result1 = sigmoid(lay1.step(a1)); a2 = result1; result2 = sigmoid(lay2.step(a2)); for (int i = 0; i < lay2.outNum; i++) { for (int j = 0; j < lay2.INPUT; j++) { weights2[i][j] += learningRate * a2[j] * (target[n][i] - result2[i]); cost += Math.pow((target[n][i] - result2[i]), 2); } } for(int i = 0; i < lay1.outNum; i++){ for(int j = 0; j < lay1.INPUT; j++){ sumFinal = 0; for(int k = 0; k < lay2.outNum; k++){ // weight * derivSigma(outputHiddenLayer) * 2(out - expected) sumFinal += result1[k] * (1 - result1[k]) * 2 * (result2[k] - target[n][k]); // * weights2[k][i] } weights1[i][j] -= learningRate * a1[j] * sumFinal * result1[i] * (1 - result1[i]); } } } lay1.update(weights1, bias1); lay2.update(weights2, bias2); } System.out.println("Epoch " + x + ": " + cost); cost = 0; } System.out.println(Arrays.toString(result1)); System.out.println(Arrays.toString(result2)); for(double[] arr : inputs) { System.out.println("This is a " + getBestGuess(sigmoid(lay2.step(sigmoid(lay1.step(arr))))) + "!"); } try (ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("network1.ser")))) { oos.writeObject(lay1); } catch (IOException ex) { ex.printStackTrace(); } try (ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("network2.ser")))) { oos.writeObject(lay2); } catch (IOException ex) { ex.printStackTrace(); } System.out.println("Done! Saved to file."); } public static double sigmoid(double x){ return 1 / (1 + Math.exp(-x)); } public static double[] sigmoid(double[] weights){ for(int index = 0; index < weights.length; index++){ weights[index] = sigmoid(weights[index]); } return weights; } public static void initialise(double[] bias){ Random random = new Random(); for(int index = 0; index < bias.length; index++){ bias[index] = random.nextGaussian(); } } public static void initialise(double[][] weights, int outNum, int INPUT){ Random random = new Random(); for(int index = 0; index < outNum; index++){ for(int indice = 0; indice < INPUT; indice++){ weights[index][indice] = random.nextGaussian(); } } } public static int getBestGuess(double[] result){ double k = Integer.MIN_VALUE; double index = 0; int current = 0; for(double a : result){ if(k < a){ k = a; index = current; } current++; } return (int)index; } } class Layers implements Serializable { private static final long serialVersionUID = 8L; double[][] weights; double[] bias; int outNum; int INPUT; public Layers(double[][] weights, double[] bias, int outNum, int INPUT){ this.weights = weights; this.bias = bias; this.outNum = outNum; this.INPUT = INPUT; } public void update(double[][] weights, double[] bias){ this.weights = weights; this.bias = bias; } public double[] step(double[] aa){ double[] out = new double[outNum]; for (int index = 0; index < outNum; index++) { for (int indices = 0; indices < INPUT; indices++) { out[index] += weights[index][indices] * aa[indices]; } } return out; } } Thanks in advance!
How can I take the length from the text files in java?
I am new in java. Firstly, I'm sorry for my English. I wrote a code to merge two different txt files in the mergedFile.txt with determined data from the data1.txt and data2.txt. I create 5 different arrays to use them better but I cannot learn the length of words in the textfiles so arrays are using determined parameter. If I want to add another student, this codes don't work. Can you help me? data1.txt ID,Name,LastName,Department 12345,John,Samon,Computer Science 14524,David,Souza,Electric and Electronic . . data2.txt ID,Q1,Q2,Q3,Midterm,Final 12345,100,90,75,89,100 14524,80,70,65,15,90 . margedFile.txt ID,Name,Q_Average,Midterm,Final,Department 12345,John,88.3,89,100,Computer Science 14524,David,67.0,100,70,Electric and Electronic This is ReadData Class import java.io.FileInputStream;//import java.io library import java.util.Scanner;//import scanner library public class ReadData { public static String[] Read(String filename,String filename2) { Scanner scan = null; Scanner scan1 = null;/ FileInputStream input1 = null; FileInputStream input = null; String[] result = new String[3]; try { input = new FileInputStream(filename); scan = new Scanner(input); input1 = new FileInputStream(filename2); scan1 = new Scanner(input1); String[][] myArray = new String[4][4]; String[][] myArray1 = new String[4][6]; while(scan.hasNext() || scan1.hasNext()) { for (int i = 0; i < myArray.length; i++) { String[] split = scan.nextLine().trim().split(","); for (int j = 0; j < split.length; j++) { myArray[i][j] = split[j]; } } for (int i = 0; i < myArray1.length; i++) { String[] split1 = scan1.nextLine().trim().split(","); for (int j = 0; j < split1.length; j++) { myArray1[i][j] = split1[j]; } } } int[][] quiz = new int[3][3]; double[] average = new double[3]; int sum = 0; double averagee = 0; for (int i = 0; i < quiz.length; i++) { for (int j = 0; j < quiz.length; j++) { quiz[i][j] = Integer.parseInt(myArray1[i+1][j+1]); sum += quiz[i][j]; } averagee = sum/quiz.length; average[i] = averagee; sum = 0; } for (int i = 1; i < myArray1.length; i++) { for (int j = 1; j < myArray1.length; j++) { if(myArray[i][0].equalsIgnoreCase(myArray1[j][0])) { result[i-1] = "\n" + myArray[i][0] + " "+ myArray[i][1] + " " + (average[j-1]) +" "+ myArray1[j][4] +" " + myArray1[j][5] + " "+ myArray[i][3]; //System.out.println(Arrays.deepToString(myArray[i]) + " " + Arrays.deepToString(myArray1[j])); } } } //System.out.println(Arrays.deepToString(quiz)); //System.out.println(Arrays.toString(average)); } catch(Exception e) { System.out.println(e); } return result; } } This is WriteData class import java.io.FileOutputStream; import java.io.PrintWriter; import java.util.Arrays; public class WriteData extends ReadData { void Write(String filename) { PrintWriter writer = null; FileOutputStream output = null; try { output = new FileOutputStream(filename); writer = new PrintWriter(output); writer.print("ID,Name,Q_Average,Midterm,Final,Department "); writer.print(Arrays.toString(Read("data1.txt", "data2.txt"))); writer.flush(); writer.close(); } catch (Exception e) { // TODO: handle exception } } }
How to input Strings into a 2D array
I have this code and I need to export the strings 'Name','Testav','HWav','Lows','grade' into a 2D array with the columns being the following respectively. I then need to export the 2D array into a csv file. Any help would be greatly appreciated. import java.util.*; import java.io.*; import java.io.PrintWriter; import java.text.*; public class ComputeGrades { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.printf("Please enter the name of the input file: "); String input_name = in.next(); System.out.printf("Please enter the name of the output CSV file: "); String csv_name = in.next(); System.out.printf("Please enter the name of the output pretty-print file: "); String pretty_name = in.next(); processGrades(input_name, csv_name, pretty_name); System.out.printf("\nExiting...\n"); } public static void processGrades (String input_name, String csv_name, String pretty_name) { PrintWriter csv = null; PrintWriter pretty = null; String[][] data = readSpreadsheet(input_name); boolean resultb = sanityCheck(data); int length = data.length; ArrayList<String> test_avg = new ArrayList<String>(); ArrayList<String> HW_avg = new ArrayList<String>(); ArrayList<String> NAME = new ArrayList<String>(); ArrayList<String> ColN = new ArrayList<String>(); ArrayList<String> Hell = new ArrayList<String>(); String[][] kill_me = new String[length][]; for(int row = 1; row<length; row++) { String name = data[row][0]; String name2 = data[row][1]; String Name = name+" "+name2; int test1 = Integer.parseInt(data[row][2]); int test2 = Integer.parseInt(data[row][3]); int test3 = Integer.parseInt(data[row][4]); int Test = (test1+test2+test3)/3; String Testav = Integer.toString(Test); int hw1 = Integer.parseInt(data[row][5]); int hw2 = Integer.parseInt(data[row][6]); int hw3 = Integer.parseInt(data[row][7]); int hw4 = Integer.parseInt(data[row][8]); int hw5 = Integer.parseInt(data[row][9]); int hw6 = Integer.parseInt(data[row][10]); int hw7 = Integer.parseInt(data[row][11]); int HW = (hw1+hw2+hw3+hw4+hw5+hw6+hw7)/7; String HWav = Integer.toString(HW); int[] trying = {Test, HW}; int low = find_min(trying); String Lows = Integer.toString(low); String grade = null; if(low>=90) { grade ="A"; } if(low < 90 && low>= 80) { grade = "B"; } if(low <80 && low>=70) { grade ="C"; } if(low<70 && low>=60) { grade="D"; } if(low<60) { grade = "F"; } test_avg.add(Testav); HW_avg.add(HWav); NAME.add(Name); Hell.add(Name); Hell.add(Testav); Hell.add(HWav); Hell.add(Lows); Hell.add(grade); } System.out.println(Hell); System.out.printf("\n"); File csvFile = new File(csv_name); try (PrintWriter csvWriter = new PrintWriter(new FileWriter(csvFile));){ Hell.stream().forEach(csvWriter::println); } catch (IOException e) { } } public static int find_min(int[] values) { int result = values[0]; for(int i = 0; i<values.length; i++) { if(values[i]<result) { result = values[i]; } } return result; } public static boolean sanityCheck(String[][] data) { if (data == null) { System.out.printf("Sanity check: nul data\n"); return false; } if(data.length<3) { System.out.printf("Sanity check: %d rows\n",data.length); return false; } int cols= data[0].length; for(int row = 0; row<data.length; row++) { int current_cols = data[row].length; if(current_cols!=cols) { System.out.printf("Sanity Check: %d columns at rows%d\n", current_cols, row); return false; } } return true; } public static String[][] readSpreadsheet(String filename) { ArrayList<String> lines = readFile(filename); if (lines == null) { return null; } int rows = lines.size(); String[][] result = new String[rows][]; for (int i = 0; i < rows; i++) { String line = lines.get(i); String[] values = line.split(","); result[i] = values; } return result; } public static ArrayList<String> readFile(String filename) { File temp = new File(filename); Scanner input_file; try { input_file = new Scanner(temp); } catch (Exception e) { System.out.printf("Failed to open file %s\n", filename); return null; } ArrayList<String> result = new ArrayList<String>(); while (input_file.hasNextLine()) { String line = input_file.nextLine(); result.add(line); } input_file.close(); return result; } } input file: First,Last,Exam1,Exam2,Final,H1,H2,H3,H4,H5,H6,H7 Ping,Milledge,43,59,68,69,62,43,60,38,37,40 Elisa,Oltz,76,94,73,100,99,100,90,97,100,92 Leonard,Havers,67,95,57,69,95,71,68,61,93,61 Setsuko,Lovera,78,100,84,89,88,92,65,85,66,97 Franklyn,Degnim,54,74,50,63,78,42,42,41,67,64 Gwyneth,Marsico,61,89,81,59,59,62,88,60,66,66 Abigail,Greep,69,99,93,94,91,85,78,91,69,71 Majorie,Granvold,78,100,100,82,96,100,89,100,100,94 Daphine,Polaco,62,82,88,81,68,89,62,73,90,62 An,Corvera,44,71,37,46,57,42,59,66,54,60 Ayanna,Pensiero,64,42,56,37,53,66,69,52,43,58 Era,Deming,98,81,100,69,65,73,77,78,73,89 Michal,Slentz,73,85,81,82,74,93,81,76,69,81 Corie,Brazen,86,99,66,100,69,97,96,100,70,84 Dona,Tufte,63,54,70,71,55,68,86,66,75,63 Juan,Rohdenburg,78,89,100,91,80,97,92,100,98,100 Orville,Samit,88,63,60,88,81,56,91,76,77,80 Ricky,Knoechel,100,100,93,81,100,90,100,92,100,84 Blythe,Threet,38,68,35,61,63,51,48,72,49,51 Sammie,Wachs,46,53,52,76,50,52,56,68,46,75 Estelle,Veazey,72,87,69,98,96,77,95,91,100,91 Agatha,Keckler,100,92,90,95,85,100,94,85,92,100 Novella,Oros,85,76,100,92,84,77,77,90,86,98 Tanya,Quinlisk,47,78,71,50,79,52,69,66,51,45 Marion,Coltrin,68,68,54,39,61,44,66,58,47,74 Helene,Karow,100,100,75,79,100,100,100,92,89,96 Shonta,Bourek,100,96,90,81,97,84,91,100,100,100 Hyon,Anglemyer,81,76,43,43,47,53,44,60,57,65 Ervin,Kenison,78,53,54,75,55,46,61,75,56,69 Renato,Urch,71,64,64,84,49,57,63,69,81,64 Mikel,Burleigh,88,100,90,100,90,91,90,80,74,74 Val,Royal,100,80,100,99,100,100,76,86,100,96 Jodie,Adolfo,94,77,59,83,67,79,87,82,82,75 Roselee,Lienhard,68,75,58,82,96,62,60,94,68,58 Austin,Holznecht,76,49,79,48,58,68,67,71,70,61 Emelia,Toney,70,95,74,90,99,68,100,66,98,98 Lucy,Rhodd,71,91,100,82,100,93,100,100,71,81 Sacha,Chee,78,71,90,82,74,64,62,87,69,84 Julio,Lackner,56,86,53,88,88,73,57,59,80,85 Salvador,Gretzner,54,83,91,66,78,67,61,84,82,6 export file(csv_name) name,exam_score,hw_score,min_score,grade Ping Milledge,56.666667,49.857143,49.857143,F Elisa Oltz,81.000000,96.857143,81.000000,B Leonard Havers,73.000000,74.000000,73.000000,C Setsuko Lovera,87.333333,83.142857,83.142857,B Franklyn Degnim,59.333333,56.714286,56.714286,F Gwyneth Marsico,77.000000,65.714286,65.714286,D Abigail Greep,87.000000,82.714286,82.714286,B Majorie Granvold,92.666667,94.428571,92.666667,A Daphine Polaco,77.333333,75.000000,75.000000,C An Corvera,50.666667,54.857143,50.666667,F Ayanna Pensiero,54.000000,54.000000,54.000000,F Era Deming,93.000000,74.857143,74.857143,C Michal Slentz,79.666667,79.428571,79.428571,C Corie Brazen,83.666667,88.000000,83.666667,B Dona Tufte,62.333333,69.142857,62.333333,D Juan Rohdenburg,89.000000,94.000000,89.000000,B Orville Samit,70.333333,78.428571,70.333333,C Ricky Knoechel,97.666667,92.428571,92.428571,A Blythe Threet,47.000000,56.428571,47.000000,F Sammie Wachs,50.333333,60.428571,50.333333,F Estelle Veazey,76.000000,92.571429,76.000000,C Agatha Keckler,94.000000,93.000000,93.000000,A Novella Oros,87.000000,86.285714,86.285714,B Tanya Quinlisk,65.333333,58.857143,58.857143,F Marion Coltrin,63.333333,55.571429,55.571429,F Helene Karow,91.666667,93.714286,91.666667,A Shonta Bourek,95.333333,93.285714,93.285714,A Hyon Anglemyer,66.666667,52.714286,52.714286,F Ervin Kenison,61.666667,62.428571,61.666667,D Renato Urch,66.333333,66.714286,66.333333,D Mikel Burleigh,92.666667,85.571429,85.571429,B Val Royal,93.333333,93.857143,93.333333,A Jodie Adolfo,76.666667,79.285714,76.666667,C Roselee Lienhard,67.000000,74.285714,67.000000,D Austin Holznecht,68.000000,63.285714,63.285714,D Emelia Toney,79.666667,88.428571,79.666667,C Lucy Rhodd,87.333333,89.571429,87.333333,B Sacha Chee,79.666667,74.571429,74.571429,C Julio Lackner,65.000000,75.714286,65.000000,D Salvador Gretzner,76.000000,71.714286,71.714286,C export file 2(pretty_name) name: exam score, hw score, min score, grade Ping Milledge: 56.67, 49.86, 49.86, F Elisa Oltz: 81.00, 96.86, 81.00, B Leonard Havers: 73.00, 74.00, 73.00, C Setsuko Lovera: 87.33, 83.14, 83.14, B Franklyn Degnim: 59.33, 56.71, 56.71, F Gwyneth Marsico: 77.00, 65.71, 65.71, D Abigail Greep: 87.00, 82.71, 82.71, B Majorie Granvold: 92.67, 94.43, 92.67, A Daphine Polaco: 77.33, 75.00, 75.00, C An Corvera: 50.67, 54.86, 50.67, F Ayanna Pensiero: 54.00, 54.00, 54.00, F Era Deming: 93.00, 74.86, 74.86, C Michal Slentz: 79.67, 79.43, 79.43, C Corie Brazen: 83.67, 88.00, 83.67, B Dona Tufte: 62.33, 69.14, 62.33, D Juan Rohdenburg: 89.00, 94.00, 89.00, B Orville Samit: 70.33, 78.43, 70.33, C Ricky Knoechel: 97.67, 92.43, 92.43, A Blythe Threet: 47.00, 56.43, 47.00, F Sammie Wachs: 50.33, 60.43, 50.33, F Estelle Veazey: 76.00, 92.57, 76.00, C Agatha Keckler: 94.00, 93.00, 93.00, A Novella Oros: 87.00, 86.29, 86.29, B Tanya Quinlisk: 65.33, 58.86, 58.86, F Marion Coltrin: 63.33, 55.57, 55.57, F Helene Karow: 91.67, 93.71, 91.67, A Shonta Bourek: 95.33, 93.29, 93.29, A Hyon Anglemyer: 66.67, 52.71, 52.71, F Ervin Kenison: 61.67, 62.43, 61.67, D Renato Urch: 66.33, 66.71, 66.33, D Mikel Burleigh: 92.67, 85.57, 85.57, B Val Royal: 93.33, 93.86, 93.33, A Jodie Adolfo: 76.67, 79.29, 76.67, C Roselee Lienhard: 67.00, 74.29, 67.00, D Austin Holznecht: 68.00, 63.29, 63.29, D Emelia Toney: 79.67, 88.43, 79.67, C Lucy Rhodd: 87.33, 89.57, 87.33, B Sacha Chee: 79.67, 74.57, 74.57, C Julio Lackner: 65.00, 75.71, 65.00, D Salvador Gretzner: 76.00, 71.71, 71.71, C
This should do it, if you have question about the code, just ask. public static void processGrades (String input_name, String csv_name, String pretty_name) { DecimalFormat decimalFormat = new DecimalFormat(".000000"); String[][] data = readSpreadsheet(input_name); String[][] result = new String[data.length][]; result[0] = new String[]{"name", "exam_score", "hw_score", "min_score", "grade"}; // Export to 2D String array for(int row = 1; row < data.length; row++) { String name = data[row][0] + " " + data[row][1]; double testAverage = average(data[row], 2, 5); double homeworkAverage = average(data[row], 5, 12); double min = Math.min(testAverage, homeworkAverage); char grade = (char) (74 - ((int) min / 10)); grade = grade > 'D' ? 'F' : grade; result[row] = new String[]{ name, decimalFormat.format(testAverage), decimalFormat.format(homeworkAverage), decimalFormat.format(min), Character.toString(grade) }; } // Export 2D array into a csv String String csv = ""; for (int y = 0; y < result.length; y++) { for (int x = 0; x < result[y].length - 1; x++) { csv += result[y][x] + ","; } csv += result[y][result[y].length - 1] + "\n"; } // Save String in file File file = new File(csv_name); try { BufferedWriter bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile())); bw.write(csv); bw.close(); } catch (IOException e) { e.printStackTrace(); } } private static double average(String[] row, int fromIndex, int toIndex) { double total = 0; for (int i = fromIndex; i < toIndex; i++) { total += Integer.parseInt(row[i]); } return total / (toIndex - fromIndex); }
running time error when trying to implent a keyword frequency counter in my parser java
I want to implement my input reading method into my main class, I want use my code to parse. It's been fixed now. thanks. String x; int count = -1;= while (str.hasMoreTokens()) { count++; x = str.nextToken(); word[count] = x; System.out.println(count + ": " + word[count]); } System.out.println("---Frequency---"); // create unique words for (int i = 0; i < 7; i++) { if ((!Arrays.asList(unique).contains(word[i]))) { unique[i] = word[i]; } } // measuring frequency int[] measure = new int[10]; for (int a = 0; a < 7; a++) { if (Arrays.asList(unique).contains(word[a])) { measure[a] += 1; System.out.println(unique[a] + " : " + measure[a]); } } } } private List<String[]> termsDocsArray = new ArrayList<String[]>(); private List<String> allTerms = new ArrayList<String>(); //to hold all terms private List<double[]> tfidfDocsVector = new ArrayList<double[]>(); /**
To start with your code String text = "Professor, engineering, data, mining, research"; StringTokenizer str = new StringTokenizer(text); String word[] = new String[10]; String unique[] = new String[10]; String x; int count = -1; while (str.hasMoreTokens()) { count++; x = str.nextToken(); word[count] = x; System.out.println(count + ": " + word[count]); } System.out.println("---Frequency---"); // create unique words for (int i = 0; i < 7; i++) { if ((!Arrays.asList(unique).contains(word[i]))) { unique[i] = word[i]; } } // measuring frequency int[] measure = new int[10]; for (int a = 0; a < 7; a++) { if (Arrays.asList(unique).contains(word[a])) { measure[a] += 1; System.out.println(unique[a] + " : " + measure[a]); } } should be in it's own method like . private void doSomething(){ //This variable will hold all terms of each document in an array. String text = "Professor, engineering, data, mining, research"; StringTokenizer str = new StringTokenizer(text); String word[] = new String[10]; String unique[] = new String[10]; String x; int count = -1; while (str.hasMoreTokens()) { count++; x = str.nextToken(); word[count] = x; System.out.println(count + ": " + word[count]); } System.out.println("---Frequency---"); // create unique words for (int i = 0; i < 7; i++) { if ((!Arrays.asList(unique).contains(word[i]))) { unique[i] = word[i]; } } // measuring frequency int[] measure = new int[10]; for (int a = 0; a < 7; a++) { if (Arrays.asList(unique).contains(word[a])) { measure[a] += 1; System.out.println(unique[a] + " : " + measure[a]); } } } Secondly in ur given code u have written like int count = -1;= which accounts to this error Syntax error on token "=", { expected.It should be int count = -1; And since all your code is simply written in class without any method so it is giving you the error saying { expected. Please make sure you have copied the code correctly.
inefficient looping in java
This is my csv data: Name,Code,Price,Colour,Type,Stock A,1001,35000,Red,Car Paint,54 B,1002,56000,Blue,House Paint,90 As you can see, my coding is inefficient. This is because all the textfields in netbeans do not allow same variable names, I have to give different variable names to each text field (Example: code1, code2, code3, name1, name2,name3) Can someone help me on how to loop this data so they do it four times and i dont have to repeat the coding? and to skip the process if the fields are blank. The following is my coding: try { for(int z=0; z<4;z++) { String code1; code1=this.text1.getText(); System.out.println("this is the code: " + code1); String qty; int qty1; qty=this.quantity1.getText(); qty1=Integer.parseInt(qty); System.out.println("quantity: "+qty1); String code2; code2=this.text2.getText(); System.out.println("this is the code: " + code2); int qty2; qty=this.quantity2.getText(); qty2=Integer.parseInt(qty); System.out.println("quantity: "+qty2); String code3; code3=this.text3.getText(); System.out.println("this is the code: " + code3); int qty3; qty=this.quantity2.getText(); qty3=Integer.parseInt(qty); System.out.println("quantity: "+qty3); String code4; code4=this.text4.getText(); System.out.println("this is the code: " + code4); int qty4; qty=this.quantity2.getText(); qty4=Integer.parseInt(qty); System.out.println("quantity: "+qty4); int sum=0; BufferedReader line = new BufferedReader(new FileReader(new File("C:\\Users\\Laura Sutardja\\Documents\\IB DP\\Computer Science HL\\cs\\product.txt"))); String indata; ArrayList<String[]> dataArr = new ArrayList<>(); String[] club = new String[6]; String[] value; while ((indata = line.readLine()) != null) { value = indata.split(","); dataArr.add(value); } for (int i = 0; i < dataArr.size(); i++) { String[] nameData = dataArr.get(i); if (nameData[1].equals(code1)) { System.out.println("Found name."); name1.setText(""+ nameData[0]); int price; price=Integer.parseInt(nameData[2]); int totalprice=qty1*price; String total=Integer.toString(totalprice); price1.setText(total); sum=sum+totalprice; break; } } for (int i = 0; i < dataArr.size(); i++) { String[] nameData = dataArr.get(i); if (nameData[1].equals(code2)) { System.out.println("Found name."); name2.setText(""+ nameData[0]); int price; price=Integer.parseInt(nameData[2]); int totalprice=qty2*price; String total=Integer.toString(totalprice); price2.setText(total); sum=sum+totalprice; break; } } for (int i = 0; i < dataArr.size(); i++) { String[] nameData = dataArr.get(i); if (nameData[1].equals(code3)) { System.out.println("Found name."); name3.setText(""+ nameData[0]); int price; price=Integer.parseInt(nameData[2]); int totalprice=qty3*price; int totalprice3=totalprice; String total=Integer.toString(totalprice); price3.setText(total); sum=sum+totalprice; break; } } for (int i = 0; i < dataArr.size(); i++) { String[] nameData = dataArr.get(i); if (nameData[1].equals(code4)) { System.out.println("Found name."); name4.setText(""+ nameData[0]); int price; price=Integer.parseInt(nameData[2]); int totalprice=qty4*price; int totalprice4=totalprice; String total=Integer.toString(totalprice); price4.setText(total); sum=sum+totalprice; break; } } total1.setText("Rp. "+sum); } } catch ( IOException iox ) { System.out.println("Error"); }
Why don't you use a library like http://commons.apache.org/proper/commons-csv/
Solving this problem is actually rather straight forward if you break it down into separate parts. First you need to solve the problem of loading the data into an internal data representation that is easy to use. Just loading the file into Java is rather simple and you have already done this: BufferedReader csvFile = new BufferedReader(new FileReader(new File(path))); String line = "start"; int count = 0; while((line = csvFile.readLine()) != null){ System.out.println(line); } csvFile.close(); The next problem is splitting the line and store it in a meaningful way - for each line. HashMap<Integer, String> record = new HashMap<Integer, String>(); String[] raw = line.split(","); for(int i=0;i<raw.length; i++){ record.put(i, raw[i]); } Now you state you only want to store records that have non-empty fields so we need to check for that: HashMap<Integer, String> record = new HashMap<Integer, String>(); String[] raw = line.split(","); Boolean store = true; for(int i=0;i<raw.length; i++){ if(raw[i].equals("") || raw[i].equals(null)){ store = false; break; } record.put(i, raw[i]); } if(store) csvData.add(record); Now, you can load each record of the csv file as a dictionary that you can easily use. All that remains is to save a list of these dictionaries. ArrayList<Map<Integer, String>> csvData = new ArrayList<Map<Integer, String>>(); BufferedReader csvFile = new BufferedReader(new FileReader(new File(path))); String line = "start"; int count = 0; while((line = csvFile.readLine()) != null){ if(count == 0){//skip first line count++; continue; } HashMap<Integer, String> record = new HashMap<Integer, String>(); String[] raw = line.split(","); Boolean store = true; for(int i=0;i<raw.length; i++){ if(raw[i].equals("") || raw[i].equals(null)) { store = false; break; } record.put(i, raw[i]); } if(store) csvData.add(record); } csvFile.close(); Full code snippet that loads in data and easily access whatever information you want: public class Main { public static final int NAME = 0; public static final int CODE = 1; public static final int PRICE = 2; public static final int COLOR = 3; public static final int TYPE = 4; public static final int STOCK = 5; public static void main(String[] args) throws IOException{ ArrayList<Map<Integer, String>> csvData = loadCSVFile("C:\\path\\to\\file\\products.txt"); //Print some of the data System.out.println("---------------------------"); for(Map<Integer, String> record : csvData){ printInfo(record); } } public static ArrayList<Map<Integer, String>> loadCSVFile(String path) throws IOException{ ArrayList<Map<Integer, String>> csvData = new ArrayList<Map<Integer, String>>(); BufferedReader csvFile = new BufferedReader(new FileReader(new File(path))); String line = "start"; int count = 0; while((line = csvFile.readLine()) != null){ if(count == 0){ count++; continue; } HashMap<Integer, String> record = new HashMap<Integer, String>(); String[] raw = line.split(","); Boolean store = true; for(int i=0;i<raw.length; i++){ if(raw[i].equals("") || raw[i].equals(null)) { store = false; break; } record.put(i, raw[i]); } if(store) csvData.add(record); } csvFile.close(); return csvData; } public static void printInfo(Map<Integer, String> record){ System.out.println(record.get(CODE) + " : " + record.get(TYPE)); System.out.println(record.get(NAME) + " : " + record.get(STOCK) + " : " + record.get(PRICE)); System.out.println("---------------------------"); } }