Results 1 to 7 of 7
- 03-02-2011, 03:48 AM #1
Member
- Join Date
- Mar 2011
- Posts
- 3
- Rep Power
- 0
Read in From file to array and convert to double
I am just doing challenges with friends and I am trying to input points from a file that represent coordinates for a triangle. The program works if I hard code in the values for the points. I am reading in the file using DataInputStream and saving it to a string variable. Then converting it to double using parseDouble and assigning it to an array. Then I assign the elements of the array to individual points. But for some reason it says the points are 0. I know the readLine is depricated but using readUTF doesn't work either. Are there any suggestions? I have included the entire code below.
import static java.lang.Math.sqrt;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class MyTraingleReadIn {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
double x1;
double x2;
double x3;
double y1;
double y2;
double y3;
double[] array;
array = new double[6];
int counter = 0;
File file = new File("MyFile.txt");
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
try {
fis = new FileInputStream(file);
// Here BufferedInputStream is added for fast reading.
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
// dis.available() returns 0 if the file does not have more lines.
while (dis.available() != 0) {
// this statement reads the line from the file and print it to
// the console.
String strIn = dis.readLine();
array[counter] = Double.parseDouble(strIn);
counter ++;
}
// dispose all the resources after using them.
fis.close();
bis.close();
dis.close();
} catch (FileNotFoundException e) {
// e.printStackTrace();
} catch (IOException e) {
// e.printStackTrace();
}
// initialize points
x1 = array[0];
//System.out.print(x1);
x2 = array[1];
x3 = array[2];
y1 = array[3];
//System.out.print(y1);
y2 = array[4];
y3 = array[5];
//declare sides and points
double side1;
double side2;
double side3;
double result;
side1 = sides(x1,x2,y1,y2);
side2 = sides(x1,x3,y1,y3);
side3 = sides(x2,x3,y2,y3);
if(isValid(side1,side2,side3)){
result = area(side1,side2,side3);
System.out.println(result);
}else{
System.out.println("Input is invalid!");
}
}
//comment: returns true if the sum of any two sides is greater than the third side
public static boolean isValid(double side1, double side2, double side3){
boolean bln = false;
double sum1 = side1 + side2;
double sum2 = side1 + side3;
double sum3 = side2 + side3;
if(sum1 > side3){
bln = true;
}else if (sum2 > side2){
bln = true;
}else if(sum3 > side1){
bln = true;
}else{
bln = false;
}
return bln;
}
//comment: returns area of the triangle
public static double area(double side1, double side2, double side3){
double s;
double area;
s = (side1 + side2 + side3)/2;
area = sqrt(s*(s - side1)*(s - side2)*(s - side3));
return area;
}
//determine sides
public static double sides(double x1,double x2,double y1,double y2){
double side;
side = distance(x1,x2,y1,y2);
return side;
}
//Distance formula
public static double distance(double x1, double x2, double y1, double y2){
double distance;
distance = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
return distance;
}
}Last edited by jlwhite; 03-02-2011 at 03:53 AM.
- 03-02-2011, 04:10 AM #2
InputStreams are intended to read raw bytes and not textual data. Try using the Scanner class instead.
- 03-02-2011, 04:16 AM #3
- Join Date
- Jul 2007
- Location
- Colombo, Sri Lanka
- Posts
- 11,374
- Blog Entries
- 1
- Rep Power
- 18
And once you read the inputs as strings, use wrappers to convert into double. But the representation (or the format) should be in digits or a pattern like doubles. Otherwise you end-up with format exception.
- 03-02-2011, 04:49 AM #4
Member
- Join Date
- Mar 2011
- Posts
- 3
- Rep Power
- 0
ok well I am new to java programming and I don't know all the syntax and functions and stuff but this is what i'm trying to do to convert and it gives me a format exception
while (scanner.hasNextLine()) {
String strIn = scanner.nextLine();
array[counter] = Double.valueOf(strIn.trim());
- 03-02-2011, 04:51 AM #5
Member
- Join Date
- Mar 2011
- Posts
- 3
- Rep Power
- 0
Nevermind it worked. The Text file was UTF-8 encoded and I had to change it to ANSI. Thanks for the help!
- 03-02-2011, 09:20 AM #6
- Join Date
- Jul 2007
- Location
- Colombo, Sri Lanka
- Posts
- 11,374
- Blog Entries
- 1
- Rep Power
- 18
As I explain in my previous post, format can cause lots of issues. So handling them is very important. With try-catch you can do it easily, as you did.
However, don't these kind of thin in try block,
due to some errors it may not release. :) Do them in finally block to be in safe side.Java Code:// dispose all the resources after using them. fis.close(); bis.close(); dis.close();
- 03-02-2011, 09:20 AM #7
- Join Date
- Jul 2007
- Location
- Colombo, Sri Lanka
- Posts
- 11,374
- Blog Entries
- 1
- Rep Power
- 18
Similar Threads
-
Help needed: read array from file and then use it
By ChicagoAve in forum New To JavaReplies: 11Last Post: 02-18-2011, 01:02 PM -
read only double input from text file
By napi1234 in forum New To JavaReplies: 6Last Post: 06-28-2010, 04:06 PM -
Read File into 2d array
By almjodla in forum New To JavaReplies: 8Last Post: 03-23-2010, 02:55 PM -
Anyone know how to take info from a txt file and convert it to a char array?
By 2potatocakes in forum New To JavaReplies: 9Last Post: 09-11-2008, 02:51 AM -
initialize a number, which is read in from a file, into an array
By little_polarbear in forum New To JavaReplies: 19Last Post: 06-10-2008, 03:53 AM


LinkBack URL
About LinkBacks
Reply With Quote

Bookmarks