链表上包含多个元素的索引的产品

时间:2016-09-21 18:59:27

标签: java linked-list

我使用链接列表读取了一个文本文件。

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; 
    }
}

3 个答案:

答案 0 :(得分:0)

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;

答案 1 :(得分:0)

每行/每行使用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");
    }

答案 2 :(得分:0)

到目前为止,您已经很好地定义了Box类来编码文件的每一行。您缺少的部分是从文件的每一行映射到Box对象。

您可以使用Box运算符创建新的new对象:new Box(l, w, h)

下一步是从文件中的一行获取长度,宽度和高度。您已经知道如何将该行转换为String变量。下一步是使用String&#39; s split method来提取值。例如:

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类的定义,但您已经在问题中定义了这些。

考虑到这一点,请尝试将这些部分放在一起,以构建将文件转换为List Box个对象的方法。