Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取一个按钮以重复一个操作_Java_String_Button_Random_Methods - Fatal编程技术网

Java 获取一个按钮以重复一个操作

Java 获取一个按钮以重复一个操作,java,string,button,random,methods,Java,String,Button,Random,Methods,我正在为我的第一个java项目制作一个简单的应用程序。 它组合各种字符串以产生输出。例如:名字 然而,我遇到了一个障碍,我把我的GUI都布置好了,所有的字符串都编好了,它们都会生成一个随机结果,并在被告知时将其写入文本标签,但是如果我再次单击按钮-nada。没什么 我的问题是-我如何让一个按钮重复我让它做的过程?没有人能向我解释这一点。我不是在寻找一个快速解决办法,而是一个“如何做”,因为我希望学习。:) 以下是我的代码的简化版本: public static String[] name1 =

我正在为我的第一个java项目制作一个简单的应用程序。 它组合各种字符串以产生输出。例如:名字

然而,我遇到了一个障碍,我把我的GUI都布置好了,所有的字符串都编好了,它们都会生成一个随机结果,并在被告知时将其写入文本标签,但是如果我再次单击按钮-nada。没什么

我的问题是-我如何让一个按钮重复我让它做的过程?没有人能向我解释这一点。我不是在寻找一个快速解决办法,而是一个“如何做”,因为我希望学习。:)

以下是我的代码的简化版本:

public static  String[] name1 = {
    "a", "b", "c", "d", "e", "f", "g", "h", "i", 
    "j", "k", "l", "n", "o", "p", "q", "r", "s",
    "t", "u", "v", "w", "x", "y", "z"
};

public static  String[] name2 = {
    "oh noes", "its not working","sad face"
};  

public static int name1length = name1.length;

public static int name2length = name2.length;

public static int rand1 = (int) (Math.random() * name1length);

public static int rand2 = (int) (Math.random() * name2length);

public static String phrase = name1[rand1] + " " + name2[rand2];

问题是,变量是静态的,它们只初始化一次,这意味着短语只计算一次

假设每次都需要不同的
短语
,然后每次单击按钮时重新初始化它们。从
rand1
rand2
短语中删除单词
static
,然后重新编译,应该会为您指明正确的方向

也许像

class RandomLabeller {
    private static  String[] name1 = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    private static  String[] name2 = {"oh noes","its not working","sad face"};  
    private static  int name1length = name1.length;
    private static  int name2length = name2.length;
    private int rand1 = (int)(Math.random()*name1length);
    private int rand2 = (int)(Math.random()*name2length);
    public final String phrase = name1[rand1] + " " + name2[rand2];
}

然后使用新的RandomLabeller().phrase,而不是任何class.phrase。更好的方法是,使用一些方法(如
getPhrase()

将它们隔离开来。请考虑两件事:

  • 为您的目的创建对象,不要使用这么多静态字段-这是邪恶的,以后会给您带来很多麻烦
  • Write方法reset()将字段设置为默认值,start()开始“进程”并包含reset(),如果要重复“进程”,只需调用start()

  • 请你把你的代码作为一个“代码样本”放进去,这样更容易阅读。我确实这么做了,但它一定没有格式化。谢谢你修好它。:)这听起来像是我想要实现的。因此,为该特征创建一个新类。我如何将结果调用为文本字符串?新的RandomLabeller()。短语每次都会以字符串的形式为您提供一个唯一的短语。