我使用链表读取一个文本文件。
20 10 8
4.5 8.45 12.2
8.0 2.5 4.0
1.0 15.0 18.0
3.5 3.5 3.5
6.0 5.0 10.0
每列分别表示长度、宽度和高度。
当我读取文本文件时,每一行都被视为单个节点。我想看看有没有办法求出每一行的乘积,体积?
如果不可能,那么我需要找到一种方法来调用从另一个类中读取的值(l,w,h),我已经在其中创建了getVolume()的方法。
好吧,这是我的代码到目前为止:一如既往地提前感谢你所有的帮助!
import java.util.LinkedList;
import java.util.*;
import java.io.*;
public class Runtime2 {
public static void main(String args[])throws Exception {
String content = new String();
int count=0;
File file = new File("dims.txt");
LinkedList<String> list = new LinkedList<String>();
try {
Scanner sc = new Scanner(new FileInputStream(file));
while (sc.hasNextLine()){
content = sc.nextLine();
list.add(content);
}
sc.close();
}
catch (Exception e) {
e.printStackTrace();
System.out.println();
}
Iterator i = list.iterator();
while (i.hasNext()) {
System.out.print("Node " + count++ + ": ");
System.out.println(i.next());
}
public class Box {
double length;
double width;
double height;
Box(double l, double w, double h ) {
length=l;
width=w;
height=h;
}
double getVolume() {
double vol=length*width*height;
return vol;
}
boolean isCube() {
if(length==width && width==height) {
System.out.println("The box is a cube.");
}
else
System.out.println("The box is not a cube.");
return true;
}
}
private static double getVol(String line)
// line = "2 3 4.5"
String[] nums = line.split(" ");
int len = nums.length;
double vol = 1;
for (int i = 0 ; i < len; i++){
vol*=Double.parseDouble(nums[i]);
}
return vol;
每行/行使用nextDouble
三次:Demo
double a, b, c;
while(sc.hasNextLine()){
a = sc.nextDouble();
b = sc.nextDouble();
c = sc.nextDouble();
Box box = new Box(a, b, c); //System.out.println(a + " " + b + " " + c + "n");
System.out.println("Volm of box with dimension {" + a + "," + b + "," + c + "} is :" +
box.getVolume() + "n");
}
到目前为止,您已经很好地定义了Box
类来编码文件的每一行。您缺少的部分是从文件的每一行映射到Box
对象。
您可以使用new
操作符创建一个新的Box
对象:new Box(l, w, h)
.
下一步是从文件中的一行获取长度、宽度和高度。您已经弄清楚了如何将该行放入String
变量中。下一步是使用String
的split
方法来提取这些值。例如:
String string = "a b c";
String[] values = string.split(" ");
// values[0] now contains "a";
// values[1] now contains "b";
// values[2] now contains "c";
最后,使用List
add
方法将新的"Box"添加到列表中。我建议结构化您的代码,以便将文件读取封装在自己的方法中,因此您可以尝试这样做:
public class Runtime2 {
public static void main(String args[]) throws Exception {
List<Box> boxes = readBoxesFromFile(new File("dims.txt"));
for (int i = 0; i < boxes.size(); i++) {
System.out.println("Box " + i + " volume: "
+ boxes.get(i).getVolume());
}
}
private static List<Box> readBoxesFromFile(File file) {
List<Box> boxes = new LinkedList<Box>();
/*
* - Create File object
* - Create Scanner for File
* - For each line in the file
* Split the line into a string array
* Create a 'Box' instance
* Add the Box to your list
*/
return boxes;
}
}
我省略了导入和Box
类的定义,但是您已经在您的问题中定义了这些。
记住这一点,试着把这些部分组合在一起,构建将文件转换为Box
对象的List
的方法。