循环没有按预期工作

时间:2015-11-10 22:34:04

标签: java loops

我必须创建一个为包创建标签的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);

}
}

2 个答案:

答案 0 :(得分:2)

我可以看到你通过尝试复制和粘贴原始代码来创建循环,但结果代码的工作流程不正确。

看,你的代码目前是这样的:

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的信息,请查看this link

答案 1 :(得分:1)

您的打印件位于循环内部,在满足退出条件后不会再次运行。

我建议你做出以下改动:

  • while-do更改为do-while

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

  1. 添加boolean isRunning = true变量。这将是您新的循环退出条件。
  2. 当用户回答y时,请将退出条件设置为false
  3. 将您的while循环条件更改为while(isRunning)
  4. 与问题无关,但也很重要:

    • 您不需要使用某些变量,例如ab
      • 请记住:Java将在其上下文处于活动状态时维护变量。在这种情况下,上下文是main类,表示程序的整个持续时间。
      • 虽然您当前的项目很小并且打算用于学习,但您最终将在大型项目中处理实际代码;因此,开始开发良好的编码实践是一个好主意,而不必在以后克服已经养成的坏习惯。
    • 避免使用ab等变量名称。除了for-loop索引中的一些特定情况(通常称为i i ndex),您的变量应该具有有意义的名称。在这种情况下,它们不是必需的,但它们的名称类似于exitCharLowCaseexitCharHighCase
    • 而不是重复您的 feed 代码(从JOptionPane获取输入的变量)两次,您可以将它放在一个函数中,然后调用该函数两次,简化您的代码,以及减少维护工作(只需找到并更改一个代码而不是两个;未来的良好实践)。
    • 您正在使用OO(面向对象)语言进行编程。它可能还有点太早了,但如果它没有压倒你,那么试着在Java中学习OO和Objects
      • 您的titlefirstNamelastName//etc...变量可以转换为对象,允许您处理所有这些变量,就像它们只是一个变量一样与孩子&#34;变量