java中如何从一个数组到另一个数组获取随机值
我想从java中如何从一个数组到另一个数组获取随机值,java,arrays,random,indexoutofboundsexception,Java,Arrays,Random,Indexoutofboundsexception,我想从char[]元音和char[]辅音到char[]firstName和char[]lastName中获取一个随机数组值 我的IDE(Eclipse)没有显示任何错误 firstName[i]=辅音[random.nextInt(辅音.length)] 但是,当运行代码时,我会得到错误 我该如何修正这句话 // http://www.javapractices.com/topic/TopicAction.do?Id=62 import java.util.Random; public cla
char[]元音
和char[]辅音
到char[]firstName
和char[]lastName
中获取一个随机数组值
我的IDE(Eclipse)没有显示任何错误
firstName[i]=辅音[random.nextInt(辅音.length)]代码>
但是,当运行代码时,我会得到错误
我该如何修正这句话
// http://www.javapractices.com/topic/TopicAction.do?Id=62
import java.util.Random;
public class _001NameGenerator {
public static void main(String[] args) {
Random random = new Random();
int firstNameLength = 7; // fixed length, not "random"
int lastNameLength = 5;
System.out.println("Your firstname will be "+firstNameLength+" and you lastname "+lastNameLength+" characters long.");
char[] vowel = {'a', 'e', 'i', 'o', 'u', 'y'};
char[] consonant = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z'};
char[] firstName = new char[firstNameLength];
char[] lastName = new char[lastNameLength];
boolean wechsel = true;
for (int i = 0; i < firstNameLength; i++) {
if (wechsel == true){
firstName[i]=consonant [random.nextInt(20)]; // length of consonant array
wechsel = false;
} else {
firstName[i]=vowel [random.nextInt(6)]; // length of vowel array
wechsel = true;
}
}
for (int i = 0; i < lastNameLength; i++) {
if (wechsel == true){
lastName[i]=consonant [random.nextInt(20)];
wechsel = false;
} else {
lastName[i]=vowel [random.nextInt(6)];
wechsel = true;
}
}
System.out.println(firstName + "\n" + lastName);
}
}
//http://www.javapractices.com/topic/TopicAction.do?Id=62
导入java.util.Random;
公共类名称生成器{
公共静态void main(字符串[]args){
随机=新随机();
int firstNameLength=7;//固定长度,而不是“随机”
int lastname长度=5;
System.out.println(“您的名字将是“+firstNameLength+”而您的lastname将是“+lastNameLength+”字符长。”);
char[]元音={'a','e','i','o','u','y'};
char[]辅音={'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'};
char[]firstName=新字符[firstNameLength];
char[]lastName=新字符[lastNameLength];
布尔wechsel=真;
for(int i=0;i
答案显而易见:这两个数组的长度都为零:
char[] firstName = {};
char[] lastName = {};
这两行生成空列表,因此无论何时尝试添加内容,它都会给出一个ArrayIndexOutOfBoundsException:0
由于您具有上面的随机长度,请尝试以下方法:
char[] firstName = new char[firstNameLength];
char[] lastName = new char[lastNameLength];
另外,如果您事先不知道数组的长度,可以使用ArrayList,它是为这些目的创建的。您已经将firstName
和lastName
初始化为零长度数组。因此,在第一次迭代中,您尝试为firstName[0]
分配一个值,但是“0”对于空数组是无效的索引,因此出现了异常
应使用以下长度初始化数组:
char[] firstName = new char[firstNameLength];
char[] lastName = new char[lastNameLength];
将firstName
和lastName
数组声明为空的零长度数组。您应根据您的代码声明如下:
char[] firstName = new char[firstNameLength];
char[] lastName = new char[lastNameLength];
这会阻止您从BoundsException获取ArrayIndexOutOfBoundsException
可以,为什么您认为可以以某种方式使用它someArray[0]
?你知道数组有固定长度吗?嗨,我不知道固定长度。我只是想把它初始化一下。然而,不幸的是,给它一个firstnamelinght
的长度并不能解决这个问题。实际上它解决了这个问题,但显然你还有另一个问题。那么现在的错误消息是什么呢?线程“main”java.lang.ArrayIndexOutOfBoundsException:8在_01NameGenerator.main(_01NameGenerator.java:27)中出现异常,或者线程“main”java.lang.ArrayIndexOutOfBoundsException:8在_01NameGenerator.main(_01NameGenerator.java:32)中出现异常这意味着您的循环正在尝试访问数组绑定之外的元素。尝试正确限制[i]
和[random.nextInt(consonant.length)]
的范围(使用正确数组的长度)。谢谢。我用char[]firstName=new char[firstNameLength]尝试了你的建议代码>。数组现在具有正确的长度。但我也犯了同样的错误。我将进一步检查代码attentively@grerrg我已经试过了你的主要帖子的编辑代码,现在似乎没有错误。唯一需要添加的是打印行中字符串的字符数组。您可以通过将打印更改为System.out.println(新字符串(名字)+“\n”+新字符串(名字))代码>
char[] firstName = new char[firstNameLength];
char[] lastName = new char[lastNameLength];
char[] firstName = new char[firstNameLength];
char[] lastName = new char[lastNameLength];