2012-11-17 82 views
0

我似乎無法讓我的主要方法正常工作,因爲它應該100%。這很好,但我需要修復一個循環問題。while while循環重複方法

我的主要目標是在用戶輸入任何數字> = 1時讓程序重複方法pathCalc(),並在用戶輸入0時結束程序。但是,當用戶輸入> = 1重複該程序時,程序會重複,但當它詢問用戶是否重複或退出時,並且用戶輸入0退出時,程序會重複方法pathCalc()而不是退出。

我如何得到這個方法重複工作後,讓用戶輸入> = 1重複的方法或0退出?

import java.util.Scanner; 

     public class AssignmentArrays{ 
     static int[] data = new int [6]; 

      public static void getIDs(){ 

       Scanner seg = new Scanner(System.in); 

       int[] data = new int [6]; 
       data[0] = 0; 
       data[1] = 0; 
       data[2] = 0; 
       data[3] = 0; 
       data[4] = 0; 
       data[5] = 0; 

       /* Segment values */ 



       System.out.println("Enter cost for segment 0:"); 
       data[0] = seg.nextInt(); 

       System.out.println("Enter cost for segment 1:"); 
       data[1] = seg.nextInt(); 

       System.out.println("Enter cost for segment 2::"); 
       data[2] = seg.nextInt(); 

       System.out.println("Enter cost for segment 3:"); 
       data[3] = seg.nextInt(); 

       System.out.println("Enter cost for segment 4:"); 
       data[4] = seg.nextInt(); 

       System.out.println("Enter cost for segment 5:"); 
       data[5] = seg.nextInt(); 

    } 

    public static void pathCalc(){  

    /* Path inputs */ 

    Scanner node1 = new Scanner(System.in); 


    int pathCost; 

    System.out.println("Enter ID of segment 0 of path:"); 
    int node1value = node1.nextInt(); 

    System.out.println("Enter ID of segment 1 of path:"); 
    int node2value = node1.nextInt(); 

    System.out.println("Enter ID of segment 2 of path:"); 
    int node3value = node1.nextInt(); 

    /* Path cost calculation */ 

    pathCost = data[node1value] + data[node2value] + data[node3value]; 
    System.out.println("The cost of the trip is: $" + pathCost); 
    } 

    public static void main(String[] args){ 
     getIDs(); 
     pathCalc(); 
     System.out.println("Enter 0 to exit or any other number"+ 
             " to evaluate another path:"); 
     int choice; 
     choice = end.nextInt(); 

     while(choice != 0){ 
     getIDs(); 
     pathCalc(); 
     System.out.println("Enter 0 to exit or any other number"+ 
             " to evaluate another path:"); 
     choice = end.nextInt(); 
     } 
    } 
} 

回答

1

您正在閱讀while循環內的choice兩倍時間。如下移動一個例子:

getIDs(); 
    pathCalc(); 
    System.out.println("Enter 0 to exit or any other number"+ 
              " to evaluate another path:"); 
    int choice = end.nextInt(); 
    while(choice != 0){ 
     //getIDs(); 
     pathCalc(); 
     System.out.println("Enter 0 to exit or any other number"+ 
              " to evaluate another path:"); 
     choice = end.nextInt(); 
    } 

另外,不需要額外的標誌。您在上述條件下使用choice本身。

如果用戶在開始時輸入0,則無法啓動while循環;之後當用戶輸入0時,循環將自動終止。編號:已更新的程序。

public class AssignmentArrays { 
    static int[] data = new int[6]; 
    static Scanner seg; 

    public static void getIDs() { 
     int[] data = new int[6]; 
     data[0] = 0; 
     data[1] = 0; 
     data[2] = 0; 
     data[3] = 0; 
     data[4] = 0; 
     data[5] = 0; 

     /* Segment values */ 

     System.out.println("Enter cost for segment 0:"); 
     data[0] = seg.nextInt(); 

     System.out.println("Enter cost for segment 1:"); 
     data[1] = seg.nextInt(); 

     System.out.println("Enter cost for segment 2::"); 
     data[2] = seg.nextInt(); 

     System.out.println("Enter cost for segment 3:"); 
     data[3] = seg.nextInt(); 

     System.out.println("Enter cost for segment 4:"); 
     data[4] = seg.nextInt(); 

     System.out.println("Enter cost for segment 5:"); 
     data[5] = seg.nextInt(); 

    } 

    public static void pathCalc() { 
     int pathCost; 

     System.out.println("Enter ID of segment 0 of path:"); 
     int node1value = seg.nextInt(); 

     System.out.println("Enter ID of segment 1 of path:"); 
     int node2value = seg.nextInt(); 

     System.out.println("Enter ID of segment 2 of path:"); 
     int node3value = seg.nextInt(); 

     /* Path cost calculation */ 

     pathCost = data[node1value] + data[node2value] + data[node3value]; 
     System.out.println("The cost of the trip is: $" + pathCost); 
    } 

    public static void main(String[] args) { 
     seg = new Scanner(System.in); 
     getIDs(); 
     pathCalc(); 
     System.out.println("Enter 0 to exit or any other number" 
       + " to evaluate another path:"); 
     int choice; 
     choice = seg.nextInt(); 

     while (choice != 0) { 
      getIDs(); 
      pathCalc(); 
      System.out.println("Enter 0 to exit or any other number" 
        + " to evaluate another path:"); 
      choice = seg.nextInt(); 
     } 
     seg.close(); 
    } 
} 
+0

這並不實現什麼我需要做檢查前的選擇。我有兩個方法在主方法之前執行。首先,程序需要讀取用戶輸入的數組getIDs();,然後程序要求用戶輸入3個ID來計算價格pathCalc();然後詢問用戶他/她想要做什麼,計算另一條路徑或退出。如果輸入> = 1,則pathCalc();.在這個用戶再次被詢問是否對pathCalc();或退出。 – Kronos

+0

@Kronos:我更新了答案。希望它可以像你期望的那樣工作,否則,請分享你的'pathCalc();'和'getIDs();'方法摘要,這將幫助我更好地理解你的問題。 –

+0

我更新了我的問題。我有兩個例外。希望你現在能更好地理解。 – Kronos

0
if (choice == 0){ 
System.exit(0); 
} 

直接退出或確保進入循環