2016-09-21 4 views
0

Ich lese eine Textdatei mithilfe einer verknüpften Liste.Produkt des Index mit mehreren Elementen in einer verknüpften Liste

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 

Jede Spalte steht für Länge, Breite und Höhe.

Wenn ich die Textdatei lese, wird jede Zeile als ein einzelner Knoten behandelt. Ich versuche zu sehen, ob es eine Möglichkeit gibt, das Produkt jeder Zeile, das Volumen zu finden?

Wenn es nicht möglich ist, dann muss ich eine Möglichkeit finden, die gelesenen Werte einzeln (l, w, h) von einer anderen Klasse aufzurufen, in der ich eine Methode zu getVolume() erstellt habe.

Nun, hier ist mein Code so weit: Wie immer vielen Dank im Voraus für Ihre Hilfe!


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

Antwort

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

Verwenden nextDouble dreimal für jede Zeile/Reihe: 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"); 
    } 
0

Sie einen guten Job gemacht haben Ihre Box Klasse zu definieren, zu kodieren jede Zeile Ihrer Datei bisher . Das Stück, das Sie vermissen, wird von jeder Zeile Ihrer Datei auf ein Box Objekt abgebildet.

Sie können ein neues Objekt Box mit dem Operator new erstellen: new Box(l, w, h).

Der nächste Schritt besteht darin, die Länge, Breite und Höhe aus einer Zeile innerhalb Ihrer Datei zu ermitteln. Sie haben bereits herausgefunden, wie Sie die Zeile in eine String Variable bringen können. Der nächste Schritt besteht darin, die Stringsplit method zu verwenden, um die Werte zu extrahieren. Zum Beispiel:

String string = "a b c"; 
String[] values = string.split(" "); 
// values[0] now contains "a"; 
// values[1] now contains "b"; 
// values[2] now contains "c"; 

Schließlich verwenden die Listadd Methode, um die neue `Box auf Ihrer Liste anzuhängen. Ich empfehle, die Strukturierung der Code so, dass die Datei Lesung innerhalb seiner eigenen Methode eingekapselt ist, so dass Sie vielleicht so etwas wie dies versuchen:

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

} 

ich die Einfuhren weggelassen habe, und die Definition der Box Klasse für Brevity, aber Sie haben diese bereits in Ihrer Frage definiert.

In diesem Sinne, versuchen Sie, diese Teile zusammen, um Ihre Methode zum Konvertieren Ihrer Datei in eine List von Box Objekte zu konstruieren.

Verwandte Themen