如何选择存储在一个接口文件的数组随机元素?

问题描述 投票:0回答:2

所以我写了类的分配。我已经得到停留在我尝试写一个函数来选择一个随机元素。我试图访问该数组存储在一个接口文件。我有一个实现该接口一个主文件,然后扩展主文件的多个文件。

我编写和测试如何选择从该接口文件中的随机元素。该文件包含许多不同的阵列,但是出于测试目的,我会选择姓氏[]。如何具体功能如下书面抛出一个出界失误,但我不知道如何去纠正它。

这是测试文件:

import java.util.Random;

public class MemberTest {

  public static void main(String[] args) {

    Random rnd = new Random();
    int rndNum = rnd.nextInt();

    Member m = new Member();
    Student s = new Student();
    Staff ss = new Staff();
    Faculty f = new Faculty();
    Employee e = new Employee();
    Names n = new Member();


    System.out.println(n.lastName[rndNum]);

    System.out.println(m.toString(true));
  }
}

这是实现Names.java文件

public class Member implements Comparable<Member>, Names{

public Member() {}

// randomly fill in all data member.
public void generate() {}

public String toString() {
    return toString(false);
}

public String toString(boolean ok) {
    return String.format("%s%3d-%2d-%4d %15s, %-15s", ok? "Mem " : "", ID / 1000000, ID / 10000
            % 100, ID % 10000, lastName, firstName );
}

//public int compareTo(Member) {}

public int compareTo(Member m) { 
    return ID - m.ID; 
}

public String htmlRow() {
    return String.format("<TR>%s</TR>", htmlColumns());
}

public String htmlColumns() {
    return String.format("<TD>%3d-%2d-%4d</TD> <TD>%15s,</TD> <TD>%-15s</TD>", ID / 1000000, ID / 10000
            % 100, ID % 10000, lastName, firstName );
} 

protected String firstName[], lastName[]; 
protected int ID;

}

这是接口文件:

public interface Names {

// Fields in interface are always and implicitly public, static and final.
// All methods in interface are implicitly public and abstract.

public static final String lastName [] = {
    "Abdalla", "Andres", "Anzai", "Armstrong", "Arvig", "Ash", "Baca", "Badine",
    "Baehr", "Bair", "Baligad", "Barlow", "Barrett", "Becker", "Bell",
    "Benbow", "Biggs", "Blevins", "Blood", "Bohan", "Bond", "Bonner",
    "Bosch", "Bryson", "Buechele", "Bullis", "Burk", "Burns", "Byron",
    "Calderon", "Careuthers", "Carr", "Carson", "Carter", "Castle", "Chan",
    "Charney", "Christenson", "Cisneros", "Cliton", "Coldewey", "Coodey",
    "Cook", "Cooper", "Coy", "Currie", "Curtis", "Dirkse", "Dirscoll",
    "Dodrill", "Ehlert", "Elias", "Elliott", "Enterline", "Ericsson",
    "Fernandez", "Fisher", "Flory", "Freese", "Fruzza", "Fu", "Fuhrman", "Gage",
    "Garcia", "Garmon", "Giffith", "Gill", "Gillen", "Glascock", "Gomez",
    "Goraya", "Greer", "Hansen", "Hartley", "Hawkins", "Hemme", "Hensley",
    "Hentges", "Herron", "Hightower", "Hines", "Holloway", "Holmes",
    "Issac", "Jackson", "Jagodin", "Jiang", "Johnson", "Jordan", "Jouda", "Joven",
    "Kalpesh", "Katz", "Kaur", "Kegley", "Kimsey", "King", "Kohn", "Kone",
    "LaCasse", "Lackey", "Lathrop", "Le", "Levy", "Lynos", "Maas", "Mackall",
    "Madsen", "Magee", "Maldonado", "McDaneld", "McMillian", "McNeill",
    "Meadors", "Medina", "Metz", "Millikin", "Minner", "Mondragon", "Monge", "Moore",
    "Moreno", "Murkland", "Musick", "Myers", "Neal", "Ngo", "Nolan", "Nunez",
    "O'Neil", "Oropeza", "Owen", "Patel", "Pfister", "Philips", "Picato",
    "Porras", "Porter", "Pratt", "Pryor", "Ragle", "Rai", "Raja", "Rill",
    "Roberts", "Roddy", "Rose", "Roux", "Rubio", "Ruiz", "Saito", "Samidin",
    "Sampson", "Sanchez", "Scanlan", "Schmidt", "Schoberg", "Sheppard",
    "Simmons", "Sison", "Smith", "Snow", "Soto", "Sozinho", "Stevens",
    "Stidham", "Strange", "Sy", "Tamayo", "Taylor", "Thomas", "Tran", "Vincent",
    "Walker", "Wandke", "Ward", "Warner", "Waugh", "Webb", "Wells", "White",
    "Wilson", "Winther", "Wuertz", "Yong" };
java oop
2个回答
0
投票

作为@Himanshu说,如果你没有你的随机,它很容易的最大值的控制,你的代码失败ArrayIndexOutOfBoundsException异常

试图改变谁得到的整行:int rndNum = rnd.nextInt();int rndNum = rnd.nextInt(Names.lastName.length);并没有问题应该工作。


1
投票

我怀疑这里的问题是在测试这些代码:

Random rnd = new Random();
int rndNum = rnd.nextInt();
...
System.out.println(n.lastName[rndNum]);

现在RND并没有真正照顾什么价值它与有界或什么是最大范围在这里。您将需要约束它。所以,现在rnd.nextInt()可以产生100,1000,10000 ...

这是你需要控制什么

你可以做的是,重新写了以下路线为:

int rndNum = rnd.nextInt();

int rndNum = rnd.nextInt()%lastName.length;

注:我没有经历过整个代码消失了,但第一个问题,我看到的。试试吧,让知道是否还有问题。

© www.soinside.com 2019 - 2024. All rights reserved.