如何使我的while循环与用户提示工作?

时间:2014-08-13 00:41:33

标签: java vector while-loop tostring

在这里,我有一个机器人应用程序,主要由三个用户提示组成。在第三个提示之后,它必须循​​环回到第一个提示,直到用户键入 QUIT ,然后显示向量元素的所有细节。现在,我遇到应用程序的问题,因为当我在while-loop中放置第一个提示时,当应用程序启动时,没有任何反应,除非我把它放出循环,但这不会循环回来。所以有人可以给我一些指导,因为我是编程的新手。非常感谢!

class KillerRobot {

private String name;
private String mainWeapon;
private int numberOfKills;

KillerRobot()
{
}

public String getName()
{
    return name;
}

public String getMainWeapon()
{
    return mainWeapon;
}

public int getNumberOfKills()
{
    return numberOfKills;
}

public String toString()
{
    return name + " used a " + mainWeapon + " to destroy " + numberOfKills + " enemies ";
}

public void setName(String a)
{
    name = a;
}

public void setMainWeapon(String b)
{
    mainWeapon = b;
}

public void setNumberOfKills(int c)
{
    numberOfKills = c;
}
}

主要方法类:

import java.util.Scanner;
import java.util.Vector;

class TestVector2 {

public static void main(String [] args)
{
    String prompt = "Please enter the name of the Killer Robot or QUIT to finish";
    String prompt2 = "Please enter the main weapon for the robot";
    String prompt3 = "Please enter the number of kills for this robot";

    System.out.println(prompt);                     //The first prompt and has to loop back unless QUIT from user
    Scanner userInput = new Scanner(System.in);

    Vector <KillerRobot> robotDetails = new Vector <KillerRobot>();     //adding object to Vector elements

    do {
        System.out.println(prompt);                 //The first prompt and has to loop back unless QUIT from user
        robot = new KillerRobot();

        String a = userInput.next();
        robot.setName(a);

        System.out.println(prompt2);
        String b  = userInput.next();
        robot.setMainWeapon(b);

        System.out.println(prompt3);
        int c = userInput.nextInt();
        robot.setNumberOfKills(c);

        robotDetails.add(robot);
        System.out.println(robot);
    } while (!userInput.nextLine().equals("QUIT"));
}           
}

2 个答案:

答案 0 :(得分:2)

你的程序的逻辑有点偏,这给你带来了问题。您希望在所有三个提示之间循环,直到用户键入“QUIT”。这意味着第一个提示必须在循环内。所以诀窍是让你的while - 条件不同。而不是检查是否有任何输入(hasNext()),检查最后一个输入是否为'QUIT'。

这样做的一种方法是在循环外设置一个简单的boolean标志,然后将其用作while条件,如下所示:

 boolean quit = false;

 while(!quit) {
   System.out.println(prompt);
   String a = userInput.next(); 
   quit = "QUIT".equals(a); 
   ...
 }

这实际上仍然不理想,因为这将继续显示所有三个提示,即使用户在第一个上键入'QUIT'也是如此。我假设您希望在发生这种情况时立即跳出循环,因此您可能会考虑进行无限循环(例如,使用while(true)),然后立即跳出循环(使用{{1}当用户输入quit命令时。

答案 1 :(得分:1)

这应符合您的要求。有一些变化 - 一个代码的提示显示两次,第二个你希望它们能够在有任何机器人之前退出所以一个do-while循环会有点不方便,最后在我使用的循环结束时再次提示1,如果它们退出,则打印所有机器人(如果有的话)而不是在循环的每次迭代中将它们打印出来(因为在那时,如果你只是将它打印到控制台,你根本就不使用矢量。 / p>

public static void main(String[] args) {
            String prompt1 = "Please enter the name of the Killer Robot or enter QUIT to exit.";
            String prompt2 = "Please enter the main weapon for the robot";
            String prompt3 = "Please enter the number of kills for this robot";
            Scanner userInput = new Scanner(System.in);

            Vector <KillerRobot> robotDetails = new Vector <KillerRobot>();
            KillerRobot robot;


            //prime the loop
            System.out.println(prompt1); 
            String userEntry = userInput.next();

            while(!userEntry.equals("QUIT")){
                robot = new KillerRobot();
                robot.setName(userEntry);

                System.out.println(prompt2);
                String b  = userInput.next();
                robot.setMainWeapon(b);

                System.out.println(prompt3);
                int c = userInput.nextInt();
                robot.setNumberOfKills(c);

                robotDetails.add(robot);

                //verify repeat
                System.out.println(prompt1); 
                userEntry = userInput.next();
            }

            if(robotDetails.size() < 1){
                System.out.println("No robots");
            } else {
                for(KillerRobot i : robotDetails){
                    System.out.println(i);
                }
            }

            System.out.println("done");
        }