需要在 For 循环之外将数组输出转换为字符串
Need to Convert Array Output to String Outside of a For Loop
我正在尝试使用数组练习准备我的 Java SE 11 测试,我需要帮助让我的随机名称生成器工作。现在,我不关心名称是否“有效”(像 Xvtwg 这样真正随机的名称就可以了)。
我构建了一个循环,其中生成一个 3 到 10 之间的随机值(名称长度),然后为每个循环传递选择一个 0 到 25 之间的随机索引以获取字母表中的随机字母。所有这些都有效,我能够从循环中获取输出数组并将其转换为循环中的串联字符串。稍后当我需要调用局部变量 nameFinal 作为 set 函数的值时出现问题。
我试图在循环内部和外部声明输出字符串,但两种方式我都return“nameFinal 无法解析为变量。”我还尝试将输出数组移出循环(并重新定义其输出),但 return 相同的变量。"
我添加了一个 try/catch 块来试图更好地说明这个问题。这是我的代码:
public class Tester {
public static void main(String[] args) {
//Build random values
Random rand = new Random();
//Name random index 3-10 char
int nmax = 10;
int nmin = 3;
int rand1 = (int)(Math.random() * (nmax - nmin + 1) + nmin);
//Create random name from total number of letters
//Define Array of letters
String[] letters = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
//Create random index to pull a random letter over the length of the random index
int lmax = 25;
int lmin = 0;
//I have also tried declaring newName and nameFinal here
for(int i = 0; i <= rand1; i++) {
int randl = (int)(Math.random() * (lmax - lmin + 1) + lmin);
String[] newName;
newName[i] = letters[i];
String nameFinal = Arrays.toString(newName);
}
//Concatenate array of random letters into a "name"
try{
String nameFinal = Arrays.toString(newName);
System.out.println(nameFinal);
}catch(Exception e) {
e.PrintStackTrace()
}
//Implementation omitted
}
}
我稍微修改了你的代码。希望对您有所帮助!
public static void main(String[] args) {
//Build random values
Random rand = new Random();
Test test = new Test();
test.randomName();
test.createAge();
test.createSSN();
}
//Name random index 3-10 char
public void randomName() {
int nmax = 10;
int nmin = 3;
int rand1 = (int)(Math.random() * (nmax - nmin + 1) + nmin);
//Create random name from total number of letters
//Define Array of letters
String[] letters = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
//Create random index to pull a random letter over the length of the random index
int lmax = 25;
int lmin = 0;
ArrayList<String> name = new ArrayList<>(5);
for(int i = 0; i <= rand1; i++) {
int randl = (int)(Math.random() * (lmax - lmin + 1) + lmin);
name.add(letters[rand1]);
}
System.out.println(name.toString());
}
//Age random number between 1 and 100
private void createAge(){
int amax = 100;
int amin = 1;
int rand2 = (int)(Math.random() * (amax - amin + 1) + amin);
}
//SSN random 9 digit number
private void createSSN(){
int smax = 999999999;
int smin = 100000000;
int rand3 = (int)(Math.random() * (smax - smin + 1) + smin);
}
}
我正在尝试使用数组练习准备我的 Java SE 11 测试,我需要帮助让我的随机名称生成器工作。现在,我不关心名称是否“有效”(像 Xvtwg 这样真正随机的名称就可以了)。
我构建了一个循环,其中生成一个 3 到 10 之间的随机值(名称长度),然后为每个循环传递选择一个 0 到 25 之间的随机索引以获取字母表中的随机字母。所有这些都有效,我能够从循环中获取输出数组并将其转换为循环中的串联字符串。稍后当我需要调用局部变量 nameFinal 作为 set 函数的值时出现问题。
我试图在循环内部和外部声明输出字符串,但两种方式我都return“nameFinal 无法解析为变量。”我还尝试将输出数组移出循环(并重新定义其输出),但 return 相同的变量。"
我添加了一个 try/catch 块来试图更好地说明这个问题。这是我的代码:
public class Tester {
public static void main(String[] args) {
//Build random values
Random rand = new Random();
//Name random index 3-10 char
int nmax = 10;
int nmin = 3;
int rand1 = (int)(Math.random() * (nmax - nmin + 1) + nmin);
//Create random name from total number of letters
//Define Array of letters
String[] letters = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
//Create random index to pull a random letter over the length of the random index
int lmax = 25;
int lmin = 0;
//I have also tried declaring newName and nameFinal here
for(int i = 0; i <= rand1; i++) {
int randl = (int)(Math.random() * (lmax - lmin + 1) + lmin);
String[] newName;
newName[i] = letters[i];
String nameFinal = Arrays.toString(newName);
}
//Concatenate array of random letters into a "name"
try{
String nameFinal = Arrays.toString(newName);
System.out.println(nameFinal);
}catch(Exception e) {
e.PrintStackTrace()
}
//Implementation omitted
}
}
我稍微修改了你的代码。希望对您有所帮助!
public static void main(String[] args) {
//Build random values
Random rand = new Random();
Test test = new Test();
test.randomName();
test.createAge();
test.createSSN();
}
//Name random index 3-10 char
public void randomName() {
int nmax = 10;
int nmin = 3;
int rand1 = (int)(Math.random() * (nmax - nmin + 1) + nmin);
//Create random name from total number of letters
//Define Array of letters
String[] letters = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
//Create random index to pull a random letter over the length of the random index
int lmax = 25;
int lmin = 0;
ArrayList<String> name = new ArrayList<>(5);
for(int i = 0; i <= rand1; i++) {
int randl = (int)(Math.random() * (lmax - lmin + 1) + lmin);
name.add(letters[rand1]);
}
System.out.println(name.toString());
}
//Age random number between 1 and 100
private void createAge(){
int amax = 100;
int amin = 1;
int rand2 = (int)(Math.random() * (amax - amin + 1) + amin);
}
//SSN random 9 digit number
private void createSSN(){
int smax = 999999999;
int smin = 100000000;
int rand3 = (int)(Math.random() * (smax - smin + 1) + smin);
}
}