簡體   English   中英

循環無法正常工作

[英]Loop doesn't work as expected

我必須創建一個Java代碼,為包裝創建標簽。 當用戶輸入“ y”或“ Y”以響應“您想創建更多”時,它將再次循環。 如果用戶輸入“ y”或“ Y”以外的任何內容,它將退出循環。 我遇到的問題是,在用戶輸入所有信息並被問到問題后,如果用戶說了y或Y以外的任何內容,它確實會退出程序,但不會輸出任何標簽信息。 如果輸入y或Y,它將正確輸出標簽信息,並再次完美地循環運行。 只是想知道是否有人可以幫助我了解我在做什么,以便我輸入y或Y以外的任何內容后可以輸出標簽信息。

import javax.swing.JOptionPane;

public class MailOrderAFG //Define my public class
{
    public static void main(String [] args)
    {
    String title, firstName, lastName, streetAddress, city, state, zip, numBoxesInput, enterAnother;
    String a = "y", b = "Y";
    title = JOptionPane.showInputDialog("Enter title (Mr., Mrs., Ms., etc.): ");
    firstName = JOptionPane.showInputDialog("Enter first name: ");
    lastName = JOptionPane.showInputDialog("Enter last name: ");
    streetAddress = JOptionPane.showInputDialog("Enter street address: ");
    city = JOptionPane.showInputDialog("Enter city: ");
    state = JOptionPane.showInputDialog("Enter state: ");
    zip = JOptionPane.showInputDialog("Enter zip code: ");
    numBoxesInput = JOptionPane.showInputDialog("Enter number of boxes in the order: ");
    enterAnother = JOptionPane.showInputDialog ("Do you want to produce more labels? Y or N ");
    int numBoxes = 0;
    int i;


    while(enterAnother.equals(a) || enterAnother.equals(b)) //priming read

    {



        numBoxes = Integer.parseInt(numBoxesInput); //changing string to int so we can do arithmatic with it
        {


            for (i = 1; i <= numBoxes; i++) { //adding one until i is equal to numBoxes, then it will exit the loop
            System.out.println(title + " " + firstName + " " + lastName);
            System.out.println(streetAddress);
            System.out.println(city + ", " + state + " " + zip);
            System.out.println("Box " + i + " of " + numBoxes);
            System.out.println();}



            title = JOptionPane.showInputDialog("Enter title (Mr., Mrs., Ms., etc.): ");
            firstName = JOptionPane.showInputDialog("Enter first name: ");
            lastName = JOptionPane.showInputDialog("Enter last name: ");
            streetAddress = JOptionPane.showInputDialog("Enter street address: ");
            city = JOptionPane.showInputDialog("Enter city: ");
            state = JOptionPane.showInputDialog("Enter state: ");
            zip = JOptionPane.showInputDialog("Enter zip code: ");
            numBoxesInput = JOptionPane.showInputDialog("Enter number of boxes in the order: ");
            enterAnother = JOptionPane.showInputDialog ("Do you want to produce more labels? Y or N ");

        }

    }

        System.exit(0);

}
}

我可以看到您通過嘗試復制和粘貼原始代碼創建了循環,但是生成的代碼的工作流程不正確。

看,您的代碼當前如下所示:

FETCH INFO FROM USER
ASK IF USER WANTS MORE

while (WANTSMORE)
    PRINT INFO

    FETCH INFO FROM USER
    ASK IF USER WANTS MORE
end while

end program

看,它實際上應該就是這樣:

do
    FETCH INFO FROM USER
    ASK IF USER WANTS MORE
    PRINT INFO
while (WANTSMORE)

end program

查看是否可以重新排序代碼以更正工作流程。 如果您需要有關do-while信息, do-while檢查此鏈接

您的打印件位於循環中,在滿足退出條件后該循環不會再次運行。

我建議您進行以下更改:

  • 從“ while-do更改為“ do-while

或者,如果您需要知道用戶是否已停止在其他地方輸入:

  1. 添加一個boolean isRunning = true變量。 這將是您的新循環退出條件。
  2. 當用戶回答y ,將退出條件設置為false
  3. 將您的while循環條件更改為while(isRunning)

與問題無關,但也很重要:

  • 您不需要使用某些變量,例如ab
    • 切記:Java將在其上下文處於活動狀態時維護變量。 在這種情況下,上下文是main類,表示程序的整個持續時間。
    • 盡管您當前的項目很小,只適合學習,但最終您將在大型項目中從事真實代碼的開發。 因此,開始開發良好的編碼習慣是一個好主意,而不必稍后克服已養成的不良習慣。
  • 避免使用像ab這樣a變量名。 除了一些特殊情況(例如for-loop索引)(對於i ndex,通常稱為i )外,您的變量應具有有意義的名稱。 在這種情況下,不需要它們,但是它們將被命名為exitCharLowCaseexitCharHighCase
  • 您可以將其包含在一個函數中,然后兩次調用該函數,從而簡化了代碼並減少了維護工作(只需查找和更改一個代碼,而不是重復一次),而不是重復兩次提要代碼(變量從JOptionPane獲取輸入)。第二;對未來的良好做法)。
  • 您正在使用OO(面向對象)語言進行編程。 可能還為時過早,但是如果它沒有使您不知所措,請嘗試學習Java中的OO和Objects
    • 您的titlefirstNamelastName//etc...變量可以變成一個對象,使您可以處理所有這些變量,就好像它們只是帶有“子”變量的一個變量一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM