2017-06-26 6 views
1

Ich arbeite in Java und ich möchte meine Schleife so lange laufen, wie es Projekte wie vom Benutzer angegeben gibt. Ab jetzt läuft der Code für eine Iteration durch und liest die Ergebnisse der einen Schleife, wird aber nicht weiter fortfahren.Java-Schleife für mehrere Projekte

Wenn der Benutzer sagt, dass es 3 Projekte gibt, möchte ich, dass der Code dreimal durch die Schleife läuft und mir die Summe jedes Projekts mitteilt. Gerade jetzt, es sagt mir, die insgesamt 1 Projekt, ob ich die Anzahl der Projekte angeben, 1 oder 5.

double projectBoardFootage = 1.0; 
    double projectBoardFootageTotal = 0.0; 
    int i = 0; 

    System.out.println("How many projects do you want to estimate?"); 
    int numberOfProjects = scan.nextInt(); 


    for(i = 0; i < numberOfProjects; ++i) { 
     while (projectBoardFootage > 0) { 
      System.out.println("Enter your board footage for Project #" + (i + 1) + " (0 to exit)"); 
      projectBoardFootage = scan.nextDouble(); 
      projectBoardFootageTotal += projectBoardFootage; 
     } 
     System.out.println("The raw board footage for Project #" + (i + 1) + " is: " + projectBoardFootageTotal); 
    } 
+1

Ihr Code zeigt nicht, was "projectBoardFootage" ist, wenn Sie die Schleife eingeben. Werfen Sie einen Blick auf [MCVE] und [fragen] – pvg

+0

ich bin verwirrt durch Ihre Definition der Anzahl der Projekte ... was meinst du mit "es sagt mir die Summe von 1 Projekt, ob ich die Anzahl der Projekte sind 1 oder 5 "? –

+0

Also, wenn ich das Programm ausführen und durch die "Wie viele Projekte möchten Sie schätzen?", Kann ich eine beliebige positive Ganzzahl eingeben und meine Schleife wird nur einmal ausgeführt, anstatt die Anzahl der Male, die ich eingegeben habe. –

Antwort

0

Vielleicht möchten Sie das gesamte Board-Material reinitialisieren, um die vorherige Iterationszählung zu löschen?

for(i = 0; i < numberOfProjects; ++i) { 
    projectBoardFootageTotal = 0.0; 
    while (projectBoardFootage > 0) { 
     System.out.println("Enter your board footage for Project #" + (i + 1) + " (0 to exit)"); 
     projectBoardFootage = scan.nextDouble(); 
     projectBoardFootageTotal += projectBoardFootage; 
    } 
    System.out.println("The raw board footage for Project #" + (i + 1) + " is: " + projectBoardFootageTotal); 
} 
+0

Die Reinitialisierung der ProjektBoardFootage, sowie die Summe, hat für mich funktioniert. –

0

Das Problem in Ihrem Code ist, dass Sie die Variable projectBoardFootage verwenden, die Schleife zu beenden. Denken Sie darüber nach, was passiert, wenn dieser Wert auf 0 gesetzt ist. Wir beenden die while-Schleife und der Wert wird nie wieder geändert. Von diesem Zeitpunkt an endet jede Iteration sofort.

Die bessere Lösung ist, so etwas zu tun:

public static void main(String[] args) 
{ 
    Scanner scan = new Scanner(System.in); 
    System.out.println("How many projects do you want to estimate?"); 
    int numberOfProjects = scan.nextInt(); 

    for(int i = 0; i < numberOfProjects; ++i) { 
     foobar(scan, i+1); 
    }   
} 

private static void foobar(Scanner scan, int projectNr) 
{   
    boolean wantsToQuit = false; 
    double projectBoardFootageTotal = 0; 
    while (!wantsToQuit) { 
     System.out.println("Enter your board footage for Project #" + projectNr + " (q to exit)"); 
     String tmp = scan.next(); 
     if(tmp.equalsIgnoreCase("q")) 
      wantsToQuit = true; 
     else 
      projectBoardFootageTotal += Double.parseDouble(tmp); 
    } 
    System.out.println("The raw board footage for Project #" + projectNr + " is: " + projectBoardFootageTotal);   
} 

Dieser Code sorgt auch für die Benutzer gibt einen empfindlicheren keycode als ‚0‘ zu beenden.