Java 自动为数组赋值

Java 自动为数组赋值,java,arrays,Java,Arrays,例如: wordsUsed[0][0] = "Word 1"; wordsUsed[0][1] = "0"; wordsUsed[1][0] = "Word 2"; wordsUsed[1][1] = "0"; String wordsCopy[][] = new String[2][2] 我想要的是WordScope[][]包含“Word 1”2次,而“Word 2”也包含2次。 我不想要的是随机次数的“单词1”和随机次数的“单词2” ^是一个字符串,其中有一个单词//x表示“任

例如:

 wordsUsed[0][0] = "Word 1";
 wordsUsed[0][1] = "0";
 wordsUsed[1][0] = "Word 2";
 wordsUsed[1][1] = "0";

 String wordsCopy[][] = new String[2][2]
我想要的是WordScope[][]包含“Word 1”2次,而“Word 2”也包含2次。 我不想要的是随机次数的“单词1”和随机次数的“单词2”

^是一个字符串,其中有一个单词//x表示“任意值”

wordsUsed[x][1] 
^是标准的“0”

^是一个新数组,将在kleurGebruikt[x][0]中存储每个字符串中的2个

基本上,我试图实现的是[x][0]中的同一字符串在新数组中的存储次数不会超过2次

到目前为止,我得到的是它将检查计数器,如果它是0,它将复制字符串,然后将0更改为1。如果以后它得到相同的字符串,它将看到它已经被使用过一次,并再次复制它。现在我的问题是,当它被复制两次时,我不确定如何让它跳过这个字符串并尝试另一个。谢谢你的帮助

public void randomWords() {
    Random r = new Random();
    int rndm = 0;

    for(int i=0; i<4; i++){
        for(int j=0; j<5; j++){
            rndm = r.nextInt(wordsUsed.length);
            if (wordsUsed[rndm][1].equals("0")){
                wordsCopy[i][j] = wordsUsed[rndm][0];
                wordsUsed[rndm][1] = "1";
            }

            else if (wordsUsed[rndm][1].equals("1")){
                wordsCopy[i][j] = wordsUsed[rndm][0];
                wordsUsed[rndm][1] = "2";
            }                

            else if (wordsUsed[rndm][1].equals("2")){
                 // at this point I need to go back to the start of the current 
                 // if loop and make it so that a new random string is searched for
                 // without leaving a null element in the array.
            }  
}
public void randomWords(){
随机r=新随机();
int rndm=0;

对于(int i=0;i使用等于来比较字符串。因此,代替-

if (kleurGebruikt[rndm][1] == "0"){
    ...
}
应该是-

if("0".equals(kleurGebruikt[rndm][1])){
    ...
}
编辑:

由于这些变量名和设计,我很难理解你的代码。这里有一种方法可以做到。如果我是你,我不会使用数组来完成这项任务-

Random r = new Random();
int rndm = 0;

String[][] wordsUsed = new String[2][2];
wordsUsed[0][0] = "Word 1";
wordsUsed[0][1] = "0";
wordsUsed[1][0] = "Word 2";
wordsUsed[1][1] = "0";

String wordsCopy[][] = new String[2][2];

int ctrR = 0;
int ctrC = 0;
boolean isDone = false;

while(!isDone) {

    rndm = r.nextInt(wordsUsed.length);

    if (wordsUsed[rndm][1].equalsIgnoreCase("0") 
            || wordsUsed[rndm][1].equalsIgnoreCase("1")){

        if (wordsUsed[rndm][1].equalsIgnoreCase("0")){
            wordsCopy[ctrR][ctrC] = wordsUsed[rndm][0];
            wordsUsed[rndm][1] = "1";
        } else {
            wordsCopy[ctrR][ctrC] = wordsUsed[rndm][0];
            wordsUsed[rndm][1] = "2";
        }     

        if(ctrC == wordsCopy.length - 1){
            ctrR++;
            ctrC = 0;
        } else { 
            ctrC++;
        }
    }

    if(ctrR == wordsCopy.length){
         // If ctrR reached the length, we have successfully completed copying
        isDone = true;
    }    
}           


///////////////// RESULTS /////////////////

// Values of wordsUsed array
for(int i = 0; i < wordsUsed.length; i++){
    for(int j = 0; j < wordsUsed.length; j++){
        System.out.print(wordsUsed[i][j] + "\t");

    }
}

System.out.println("\n");

// Values of wordsCopy array    
for(int i = 0; i < wordsCopy.length; i++){
    for(int j = 0; j < wordsCopy.length; j++){
        System.out.print(wordsCopy[i][j] + "\t");

    }
}
Random r=new Random();
int rndm=0;
String[][]wordsUsed=新字符串[2][2];
单词使用[0][0]=“单词1”;
用词[0][1]=“0”;
用词[1][0]=“单词2”;
用词[1][1]=“0”;
String-WordScope[][]=新字符串[2][2];
int ctrR=0;
int ctrC=0;
布尔isDone=false;
而(!isDone){
rndm=r.nextInt(字使用长度);
if(字使用[rndm][1]。相等信号案例(“0”)
||用词[rndm][1]。相等信号(“1”)){
如果(使用[rndm][1]的字)。相等信号案例(“0”)){
字透视[ctrR][ctrC]=使用的字[rndm][0];
用词[rndm][1]=“1”;
}否则{
字透视[ctrR][ctrC]=使用的字[rndm][0];
用词[rndm][1]=“2”;
}     
如果(ctrC==wordsCopy.length-1){
ctrR++;
ctrC=0;
}否则{
ctrC++;
}
}
如果(Ctr==wordsCopy.length){
//如果ctrR达到长度,我们已成功完成复制
isDone=true;
}    
}           
/////////////////结果/////////////////
//用词数组的值
for(int i=0;i
如果我理解正确,我认为如果您使用
地图
,您的问题会很容易解决。作为关键字,您可以存储单词(
“Word1”
“Word2”
,等等),并将次数作为值。例如(Java 7):

final Map wordsUsed=new HashMap();
//说
最终字符串curUsed=wordsUsed.get(wordToPut);
如果(curUsed==null){//新词,则将计数器设置为1
wordsUsed.put(wordToPut,1);
}否则{//旧单词,增加上一个计数器
wordsUsed.put(wordToPut,++curUsed);
}
如果要保留插入顺序,可以使用
LinkedHashMap


顺便说一句,Java中的数组很少能解决您的问题。JDK数据结构几乎总是提供更好、更快(说代码编写)的解决方案。

尝试用以下替换行“else if(kleurGebruikt[rndm][1]=”1“{”替换为:“if(kleurGebruikt[rndm][1]!=”0“{”…然后增加kleurGebruikt[rndm][1]by one你应该使用
equals
来比较字符串。除此之外,请用一个例子来解释你想要什么。@bsd我在主菜单中添加了一个例子post@SrinathGanesh问题是,它会检测到它已经有2个相同的,但它会留下数组中的空间,而不是寻找一个新词放在那里。我从来没有见过这样的变量名。我不确定,但是,你可以做的是从列表中收集非零字符串,然后在第二个2D数组中重复多次。我已经按照OP的注释中的要求对此进行了更改。但是这并不能解决我的问题。问题是,我需要数组中的所有“点”它需要重新启动程序,在数组中有2个字时,在停止的同一位置分配一个字already@JentevanHeuverswyn检查我的更新答案。这应该有效。我目前无法测试它,但我已经通读了代码,我明白你的意图。我非常确定这将对我起到作用,所以我会将此标记为已解决。谢谢!@JentevanHeuverswyn没问题。鉴于我可能无法使用阵列,我将尝试您的选择。问题是我需要在程序中稍后的swing中使用这些单词,并将这些单词相互比较。这是否仍然可能与地图一起使用,您会怎么做这样的事情?我对地图几乎没有经验。谢谢你当然可以在Swing中使用地图,为什么不呢?如果你不解释你想在Swing中做什么,我不知道该怎么做。
if("0".equals(kleurGebruikt[rndm][1])){
    ...
}
Random r = new Random();
int rndm = 0;

String[][] wordsUsed = new String[2][2];
wordsUsed[0][0] = "Word 1";
wordsUsed[0][1] = "0";
wordsUsed[1][0] = "Word 2";
wordsUsed[1][1] = "0";

String wordsCopy[][] = new String[2][2];

int ctrR = 0;
int ctrC = 0;
boolean isDone = false;

while(!isDone) {

    rndm = r.nextInt(wordsUsed.length);

    if (wordsUsed[rndm][1].equalsIgnoreCase("0") 
            || wordsUsed[rndm][1].equalsIgnoreCase("1")){

        if (wordsUsed[rndm][1].equalsIgnoreCase("0")){
            wordsCopy[ctrR][ctrC] = wordsUsed[rndm][0];
            wordsUsed[rndm][1] = "1";
        } else {
            wordsCopy[ctrR][ctrC] = wordsUsed[rndm][0];
            wordsUsed[rndm][1] = "2";
        }     

        if(ctrC == wordsCopy.length - 1){
            ctrR++;
            ctrC = 0;
        } else { 
            ctrC++;
        }
    }

    if(ctrR == wordsCopy.length){
         // If ctrR reached the length, we have successfully completed copying
        isDone = true;
    }    
}           


///////////////// RESULTS /////////////////

// Values of wordsUsed array
for(int i = 0; i < wordsUsed.length; i++){
    for(int j = 0; j < wordsUsed.length; j++){
        System.out.print(wordsUsed[i][j] + "\t");

    }
}

System.out.println("\n");

// Values of wordsCopy array    
for(int i = 0; i < wordsCopy.length; i++){
    for(int j = 0; j < wordsCopy.length; j++){
        System.out.print(wordsCopy[i][j] + "\t");

    }
}
final Map<String, Integer> wordsUsed = new HashMap<>();
// Put word
final String curUsed = wordsUsed.get(wordToPut);
if (curUsed == null) {  // New word, put counter to 1
    wordsUsed.put(wordToPut, 1);
} else { // Old word, increase previous counter
    wordsUsed.put(wordToPut, ++curUsed);
}