繁体   English   中英

我将如何在 java 中创建一个循环,要求用户从数组列表中选择一个 class 并且如果他们输入无效值再次询问?

[英]How would I make a loop in java that will ask the user to pick a class from the array list and if they enter an invalid value to ask again?

我的代码:

import java.util.Scanner;

public class PartyTest {

  public static void main(String[] args) {
    
    Party party = new Party();
    String[] classNames = {"theif","warrior","wizard","steve","bard"};
    
    Hero Carmilla = new Hero("Carmilla");
    Hero Alucard = new Hero("Alucard");
    Hero Steve = new Hero("steve");
    Hero Sypha = new Hero("sypha");
    
    System.out.println("The avaliable classes are:\n" );
    for(int i = 0; i < classNames.length; i++) {
        System.out.println(classNames[i]);
    }
    
    Scanner ask = new Scanner(System.in);
    System.out.println("Enter the class for Carmilla\n");
    String nameC = ask.next();
    Boolean temp;

我试图做一个while循环,但我不确定使用什么条件

    while(temp = true) {
        if(nameC.equalsIgnoreCase("theif")) {
            Carmilla.sethClass(nameC);
            temp = false;;
            break;
        } else {
            System.out.println("Invalid class try again");
            
        }
    }
    System.out.println(Carmilla);

Hero class 只是设置所有内容的值,我会使用(取决于我打电话的人的名字)`Carmilla.sethClass(nameC)',它只是将所选 class 的名称设置为 hero ZA2F2ED2F8EBC2CBB4DZ21。 我想问用户他们想为每个人设置什么 class(他们是前面有 Hero 的名字),如果用户没有输入 classNames 值之一,那么他们被告知这是一个无效的声明然后再试一次,然后再次询问他们想要什么 class (在这个例子中)卡米拉。

这是实现它的一种方法。

class 的主要方法如下。 关于它的一些注释。 首先,我将派对 class 设为英雄对象的 ArrayList,因为我假设派对只是英雄的集合。 这使得询问四个英雄的名字变得更容易,因为我们可以遍历队伍列表。

接下来,我将 Hero 对象的实例化移动到派对的初始化中,这样列表中就已经包含了我们的 Hero 对象。

如果用户输入了无效的 class,我使用了一个 for-each 循环来检查并为每个英雄分配类,并使用一个 while 循环来重定向用户。 我使用 boolean validClass检查 class 是否有效。 运行的最终 output 显示在最底部。

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class PartyTest {

    public static void main(String[] args) {

    List<Hero> party = Arrays.asList(new Hero("Carmilla"),
                                     new Hero("Alucard"),
                                     new Hero("steve"),
                                     new Hero("sypha"));
    String[] classNames = { "theif", "warrior", "wizard", "steve", "bard" };

    Scanner ask = new Scanner(System.in);
    for (Hero hero : party) {
        if (hero.getHclass()
                .equals("Default")) {
        boolean validClass = false;
        while (!validClass) {
            System.out.println("Enter the class for " + hero.getName());
            String hClass = ask.nextLine();

            for (String name : classNames) {
            if (hClass.equals(name)) {
                validClass = true;
            }

            }
            if (validClass) {
            hero.setHclass(hClass);
            }
        }
        }
    }

    party.forEach(hero -> {
        System.out.println(hero.getName() + " has class " + hero.getHclass());
    });
    }

}

英雄 class:

public class Hero {
    private String name;
    private String hclass = "Default";
    
    public Hero(String name) {
    this.name = name;

    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getHclass() {
        return hclass;
    }
    public void setHclass(String hclass) {
        this.hclass = hclass;
    }
    
    

}

Output:

在此处输入图像描述

使用for-each循环将输入的名称与 classNames 进行匹配

代码:

import java.util.Scanner;
import java.io.*;
//Hero class replace with your class
class Hero{
    String name="";
    String className="";
    public Hero(){}
    public Hero(String name){
        this.name=name;
    }
    public void sethClass(String className){
        this.className=className;
    }
    @Override
    public String toString(){
        return "Name : "+name+" className : "+className;
    }
}
public class PartyTest {

    public static void main(String[] args) throws IOException{

        //Party party = new Party();
        String[] classNames = {"theif","warrior","wizard","steve","bard"};

        Hero Carmilla = new Hero("Carmilla");
        Hero Alucard = new Hero("Alucard");
        Hero Steve = new Hero("steve");
        Hero Sypha = new Hero("sypha");

        System.out.println("The avaliable classes are:\n" );
        for(int i = 0; i < classNames.length; i++) {
            System.out.println(classNames[i]);
        }

        //Scanner ask = new Scanner(System.in);
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the class for Carmilla\n");
        boolean matched=false;
        while(!matched) {
            String nameC = br.readLine();
            //Use for-each loop to match the entered name 
            for(String name : classNames){
                if(nameC.equalsIgnoreCase(name)) {
                    Carmilla.sethClass(nameC);
                    matched=true;//Matched
                    break;

                }
            }
            if(matched)break;
            System.out.println("Invalid class try again\n");
        }
        System.out.println(Carmilla);
    }
}

OUTPUT:

$ javac PartyTest.java && java PartyTest 
The avaliable classes are:

theif
warrior
wizard
steve
bard
Enter the class for Carmilla

blaba
Invalid class try again

qwertr
Invalid class try again

Wizard
Name : Carmilla className : Wizard

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM