2017-09-29 2 views
0

Mein Problem ist, dass dieser Code nicht zurückgibt und Werte, wenn ich es anrufe.Methoden und Loops

Ich muss eine Reihe von Werten aus einer anderen TXT-Datei lesen und die Antworten ausdrucken. Dann muss ich es in einer anderen leeren Textdatei drucken lassen können.

Die Werte in der txt-Datei (ohne Raum dazwischen Linien):

1 2 3 4 5 6 
4 5 6 
7.5 8.5 9 
8.1 9.2 10.3 

Der Quellcode wie folgt:

public class Lab5d { 
    public static void main(String args[]) { 
     // Scan the input 
     Scanner scan = new Scanner(System.in); 
     String line = scan.nextLine(); 
     Scanner lineScan = new Scanner(line); 
     // Process each line separately 
     // If the next token is a double, assume there is an input line 
     while (scan.hasNextDouble()) { 

      processLine(line); 

     } 
    } 

    public static void processLine(String line) { 
     Scanner scan = new Scanner(System.in); 
     Scanner lineScan = new Scanner(line); 
     double a = lineScan.nextDouble(); 

     double sum; 
     double product; 
     double count; 
     double average; 

     sum = 0; 
     count = 0; 
     product = 1; 
     while (lineScan.hasNext()) { 

      sum = sum + a; 
      product = product * a; 
      ++count; 
     } 
     double ave = sum/count; 

     System.out.printf("sum= %.1f, product= %.1f, ave= %.1f, count= %.1f%n", sum, product, ave, count); 
    } 
} 
Kann jemand helfen?

+0

Ich würde vorschlagen, es ist Zeit, ein Debugging zu tun. Wenn Sie einen Debugger haben und wissen, wie man ihn benutzt, erleichtert das das Leben. Und es gibt immer die Option des "Arrow-Man-Debuggers": Fügen Sie Diagnose-Ausgabeanweisungen vorübergehend an wichtigen Punkten ein, um Ihnen zu zeigen, wo das Programm ausgeführt wird und welche Werte wichtige Variablen haben. –

Antwort

0

Sie lesen die Datei nicht ein. Verwenden Sie den Dateipfad als Parameter für das Objekt Scanner.

+0

Ich habe den Befehl java Lab4d

0

Es kann zwei Fälle sein, Sie können entweder Werte aus einer Datei oder Werte aus einer Befehlszeile lesen.

Zunächst wird eine Hauptmethode Blick:

public static void main(String args[]) { 
    // Scan the input 
    processSystemIn(); 
    // San the file 
    processFile("resource/values.txt"); 
} 

Die Values.TXT wird nach dem Format, das Sie in Ihrer Frage dargestellt. Und lesen Sie einen Wert Zeile für Zeile mit einer hasNextLine-Methode einer Scanner-Klasse, dann verwenden Sie eine andere Scanner-Instanz für jede einzelne Zahl aus der Zeileneingabe.

Fall 1: Ein Verfahren mit processSystemIn System.in

private static void processSystemIn() { 
    Scanner scanner = new Scanner(System.in); 
    String line = null; 

    while (scanner.hasNextLine()) { 
     line = scanner.nextLine(); 
     processLine(line); 
    } 

    scanner.close(); 
} 

Fall 2: Eine process Methode mit Datei.

private static void processFile(String fileName) { 
    try { 
     File file = new File(fileName); 
     Scanner scanner = new Scanner(file); 
     String line = null; 
     while (scanner.hasNextLine()) { 
      line = scanner.nextLine(); 
      processLine(line); 
     } 
     scanner.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

Die processLine-Methode ist bei Ihnen etwas anders. Mit einer hasNextDouble-Methode können Sie einen Wert abrufen.

Siehe das Verfahren wie folgt:

public static void processLine(String line) { 
    Scanner lineScan = new Scanner(line); 
    double a;; 
    double sum; 
    double product; 
    double count; 
    double average; 
    sum = 0; 
    count = 0; 

    while(lineScan.hasNextDouble()) 
    { 
     a = lineScan.nextDouble(); 

     product = 1; 
     sum += a; 
     product *= a; 
     ++count; 
     average = sum/count; 

     System.out.printf("sum= %.1f, product= %.1f, ave= %.1f, count= %.1f%n", sum, product, average, count); 
    } 

    lineScan.close(); 
} 

Das Ergebnis ist hier: enter image description here

dieses Resultat für Ihre Erwartung zu entsprechen Hat?

Ich hoffe, das hilft.