如何选择这个数组中随机元素只有一次在所有宣布的主要对象? [英] How to choose a random element in this array only once across all declared objects in main?

查看:126
本文介绍了如何选择这个数组中随机元素只有一次在所有宣布的主要对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想这些对象的阵列中的在主声明的所有对象打印随机名称仅一次。我的问题是,它会显示名称两次或更多次。

 公共类战斗机{    私有静态的String [] =名称{终结者,切片,忍者,牛,机器人,littlegirl};
    私有静态诠释的id = 0;    公共斗士(){
        ID ++;
        NAME =名称[(INT)(的Math.random()* names.length)];
    }    公共字符串的toString(){
        返回的String.format(ID +姓名:% - 5秒,名);
    }
}

的main()我的这些对象

 战士A1 =新型战斗机();
的System.out.println(a1.toString());战士A2 =新型战斗机();
的System.out.println(a2.toString());战士A3 =新型战斗机();
的System.out.println(a3.toString());


解决方案

如果你想保持在战斗机类的名称分配,使用一个静态变量来保存使用的名称的列表。你需要确保你没有创建比名字更数组战斗机。否则将无限循环。我会离开它给你图的一部分。这至少应该让你在正确的轨道上。

 进口的java.util.ArrayList;公共类战斗机{    私人字符串名称;    私有静态的String [] =名称{终结者,切片,忍者
             牛,机器人,littlegirl};
    私有静态诠释的id = 0;
    私有静态的ArrayList<串GT; usedNames =新的ArrayList<串GT;();
    公共无效斗士(){
        ID ++;
        串checkedName =;
        做{
            checkedName =名称[(INT)(的Math.random()* names.length)];
            如果(!usedNames.contains(checkedName))打破;
        }
        而(真);
        名称= checkedName;
        usedNames.add(名);
    }    公共字符串的toString(){
        返回的String.format(ID +姓名:% - 5秒,名为);
    }}

I would like these objects to print the random names in the array only once across all the objects declared in main. My problem is that it would show the names twice or more.

public class Fighters {

    private static String[] names = { "Terminator", "Slicer","Ninja", "cow", "Robot", "littlegirl" };
    private static int id = 0;

    public Fighters(){
        id++;
        name = names[(int) (Math.random() * names.length)];
    }

    public String toString(){
        return String.format(id+" Name:%-5s, name);
    }
}

In main() I have these objects

Fighters a1 = new Fighters();
System.out.println(a1.toString());

Fighters a2 = new Fighters();
System.out.println(a2.toString());

Fighters a3 = new Fighters();
System.out.println(a3.toString());

解决方案

If you want to keep your name assignment in the Fighter class, use a static variable to hold the list of used names. You need to make sure you have not created more Fighters than the names array. Otherwise this will loop indefinitely. I will leave it up to you to figure that part. This should at least get you on the right track.

import java.util.ArrayList;

public class Fighter {

    private String name;

    private static String[] names = { "Terminator", "Slicer","Ninja", 
             "cow", "Robot", "littlegirl" };
    private static int id = 0;
    private static ArrayList<String> usedNames = new ArrayList<String>();


    public void Fighters(){
        id++;
        String checkedName = "";
        do{
            checkedName = names[(int) (Math.random() * names.length)];
            if(!usedNames.contains(checkedName)) break;
        }
        while(true);
        name = checkedName;
        usedNames.add(name);
    }

    public String toString(){
        return String.format(id+" Name:%-5s, name");
    }

}

这篇关于如何选择这个数组中随机元素只有一次在所有宣布的主要对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆