2016-05-13 3 views
-1

Aufruf ich den folgenden Code haben:in einer Schleife eine if-Anweisung, ohne es in jeder Iteration

public static void main(final String[] args) { 
    if (args.length == 0) { 
     System.out.println("Please provide a correct directory path as an argument!"); 

    } else { 

     System.out.println("Thanks for using our CodeMetrics\n" 
       + "The process Might take a long time, please wait!\n" 
       + "Please check the CSV file for the final results!"); 
     File ad = new File(args[0]); 
     File[] list = ad.listFiles(); 

     for (File f : list) { 

      CodeMetrics codeMetrics = new CodeMetrics(); 

      codeMetrics.parseCommandLine(f.toString()); 
      codeMetrics.countComplexity(codeMetrics.sourceCodeFile); 

      // Count LOC (Lines of Code) 
      codeMetrics.countLines(codeMetrics.sourceCodeFile); 
      codeMetrics.countTestLines(codeMetrics.testFiles); 

      codeMetrics.printReport(); 
      codeMetrics.writeReport(); 

     } 

    } 

} 

jetzt würde Ich mag dem Anwender die opprtunity geben printReport() Methode wählen welken anrufen oder anrufen printReport() und writeReport() zusammen. Das Problem ist, wenn ich eine if-Anweisung setzen, wird es innerhalb der Schleife für jede Schleife und der Benutzer muss für jede Iteration in der Schleife wählen. Die einzige Idee, dass ich sehen kann, ist auf verschiedene Methoden wie folgt umzusetzen:

public static void onlyPrint(final String args){ 

} 

public static void printAndWrit (final String args){ 

} 

und beide Methoden haben den gleichen Code, mit der Ausnahme, dass einer von ihnen wird Printreport haben() und der andere beide Methoden. Aber ich bin nicht wirklich zufrieden mit dieser Lösung, da ich glaube, dass sie viel Code redudancy haben wird! Gibt es eine bessere Lösung?

Dank

+1

Eine andere Möglichkeit, dies zu formulieren, besteht darin, dem Benutzer die Möglichkeit zu geben, den Bericht zu schreiben oder den Bericht nicht zu schreiben. In beiden Fällen wird der Druck aufgerufen. –

+3

Fragen Sie den Benutzer vor der Schleife, und verwenden Sie einen booleschen Wert für ob sie eine Methode oder beide wollen. Verwenden Sie diesen Wert dann in einer if-Anweisung in der Schleife. –

Antwort

3

Was Drew Kennedy sagte ist wahrscheinlich die einfachste Antwort zu implementieren.

public static void main(final String[] args) { 
if (args.length == 0) { 
    System.out.println("Please provide a correct directory path as an argument!"); 

} else { 

    System.out.println("Thanks for using our CodeMetrics\n" 
      + "The process Might take a long time, please wait!\n" 
      + "Please check the CSV file for the final results!"); 
    File ad = new File(args[0]); 
    File[] list = ad.listFiles(); 

    //ask the user here 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Please enter a number : Would you like to (1) print, or (2) print & write?"); 
    int answer = scan.nextInt(); 
    boolean write = false; 
    if (answer == 2) { 
     write = true; 
    } 

    for (File f : list) { 

     CodeMetrics codeMetrics = new CodeMetrics(); 

     codeMetrics.parseCommandLine(f.toString()); 
     codeMetrics.countComplexity(codeMetrics.sourceCodeFile); 

     // Count LOC (Lines of Code) 
     codeMetrics.countLines(codeMetrics.sourceCodeFile); 
     codeMetrics.countTestLines(codeMetrics.testFiles); 

     //check whether the user wants to write or not 
     if (write == false) { 
      codeMetrics.printReport(); 
     } else { 
      codeMetrics.printReport(); 
      codeMetrics.writeReport(); 
     } 
    } 

} 

}

Dies sollte fragen Sie einfach den Benutzer einmal, und tun, was Sie getan müssen.

+0

Das funktioniert! Danke Kumpel :) – user5923402

+0

Gern geschehen! – Childishforlife

2

Ich stimme mit Childishforlife überein, dass die Lösung mit dem Boolean der einfachste Weg ist. Ich möchte nur ein wenig Optimierung erwähnen.

können Sie

drehen
//check whether the user wants to write or not 
    if (write == false) { 
     codeMetrics.printReport(); 
    } else { 
     codeMetrics.printReport(); 
     codeMetrics.writeReport(); 
    } 

in:

codeMetrics.printReport(); 
    if (write) { 
     codeMetrics.writeReport(); 
    } 

wenn ich alles richtig verstanden den Bericht in beiden Situationen gedruckt werden kann. Nur das Schreiben hängt von der Wahl des Benutzers ab.

+0

Sehr wahr! Das ist ein besserer Kodierungsstil als das, was ich hatte, meins ist ein wenig überflüssig. – Childishforlife

Verwandte Themen