我是java世界的新手,而且我一直试图找到这个问题的答案而不能。那么有人可以解释我如何从线程外部使用已经初始化的String。这是我想要使用的字符串的代码是“name”但是如果我将“name”设为final,我就无法为其设置值。
public class Users {
public static void GenerateNames() {
String name = "";
String str;
for (int i = 0; i <= 2; i++)
name = name + RandNames.GenerateRandomChar();
str = name;
Hashtable ht = new Hashtable();
if (ht.get(str) == null)
{
ht.put(str, name);
}
else {
}
Runnable r = new Runnable() {
public void run() {
int Anketa = (int) (1 + Math.random() * 6);
Hashtable voting = new Hashtable();
if (voting.get(name) == null)
{
}
}
};
new Thread(r).start();
}
}
还有一个问题是我把“其他”留空了。我只是需要它什么都不做。
答案 0 :(得分:2)
只需将生成name
的代码移动到单独的方法中:
public static String GenerateRandomName() {
StringBuilder name = new StringBuilder();
for (int i = 0; i <= 2; i++) {
name.append(RandNames.GenerateRandomChar());
}
return name.toString();
}
你将能够name
决赛:
public static void GenerateNames() {
final String name = GenerateRandomName();
...
}
还有一个问题是我把“其他”留空了。我只是需要它什么都不做。
完全省略它:
if (ht.get(str) == null)
{
ht.put(str, name);
}
答案 1 :(得分:0)
为了在 run 方法中使用 name 变量,您可以将此变量声明为Users类的成员,并将其标记为static,因为它在static中使用范围。
public class Users {
private static String name = "";
public static void GenerateNames() {
// your code
Runnable r = new Runnable() {
public void run() {
int Anketa = (int) (1 + Math.random() * 6);
Hashtable voting = new Hashtable();
if (voting.get(name) == null) {
}
}
};
new Thread(r).start();
}
}
答案 2 :(得分:0)
解决此类问题的一种方法是使用第二个局部变量:
public static void GenerateNames() {
String workName = ""; // you can probably think of a better variable name
for (int i = 0; i <= 2; i++)
workName = workName + RandNames.GenerateRandomChar();
final String name = workName;
现在您可以在匿名内部类中使用name
。 (这是我经常使用的模式。)