2014-02-09 41 views
0

我正在努力工作这个逻辑,但似乎无法实现。我会很感激这方面的任何方向。我想要一种方法来生成1到10之间的随机数 ,然后返回一个本地String []数组“numArr”的四个元素的数组,该数组是本方法的本地成员。因此,可以说,如果 产生的随机数是“8”,我将不得不for循环开始的“8”反向并返回:正向循环或反向循环取决于生成的随机数?

“八” “七” “六个一” “十二五”

我有一个设置为4的局部变量“len”,“len”变量决定了需要返回多少个“numArr”元素。我确保生成的随机数 小于(numArr.length - len),因此如果生成随机数为8,我的逻辑将确定并使用从8开始的反向循环。因为如果调用 转发循环,它只会执行两次,因为“numArr”只有10个元素。

我正在反向for循环:

,如果目前的随机数>(numArr.length - LEN)。所以如果随机数是7,8,9或10,逻辑将循环运行。

我目前没有返回任何东西,我只是想确保在我返回任何东西之前逻辑功能完全正常。

public static void geNums(){ 

    //LENGTH IS SET TO 4 
    int len = 4; 

    //COUNTER 
    int counter = 0; 

    //LOCAL ARRAY WITH JUS 10 ELEMENTS 
    String[] numArr = {"one","two","three","four","five","six","seven","eight","nine","ten"};  

    //RANDOM NUMBER IS GENERATED BETWEEN 1 AND 10 
    Random randNum = new Random();  
    int curRandom = randNum.nextInt(9) + 0; //0 TO 9 || 1 TO 10 

    //CHOICE ARRAY 
    String[] choices = new String[ len ]; //LENGTH IS SET TO 4 

    //DISPLAY CURRENTLY GENERATED RANDOM NUMBER 
    System.out.println("Current Random Number: " + curRandom); 
    System.out.println("-------------------------"); 

    if(curRandom > (numArr.length - len)){ 

     //REVERSE LOOP 
     for(int i = curRandom; i >= len; i--){ 

     //BREAK IF COUNTER IS MORE THAN LEN 
     if(counter > len){ 
      --counter; 
      break; 
     } 
     choices[i] = numArr[i];  //POPULATE CHOICE ARRAY 
     ++counter; 
    } 
    else{ 
     //FORWARD LOOP 
     for(int i = curRandom; i < len; i++){ 
      choices[i] = numArr[i]; //POPULATE CHOICE ARRAY 
     }  
    } 

    //DISPLAY CHOICE ARRAY ELEMENTS FOR DUBUGGING 
    for(int j = 0; j < choices.length; j++){ 
     System.out.println(choices[j]); 
    } 

}//METHOD 

回答

1

根据我的理解,您生成一个介于1..10之间的数字。如果它大于五,则将其字符串名称保存到数组中。我已经修改了你的代码,希望你能理解。 我发现的第一个问题是(int i = curRandom; i> = len; i--)...... choices[i] = numArr [i]。记住你的数组(选择)被声明为4的长度:String[] choices = new String[ len ]; //LENGTH IS SET TO 4那么如果你生成8号呢?您可以从8开始蒙山i,当你调用choices[i]等于蒙山choices[8] 它会给一个IndexOutOfBoundException,因为你的阵列只有4所以这里是一个解决方案:

//LENGTH IS SET TO 4 
      int len = 4; 

      //COUNTER 
      int counter = 0; 

      //LOCAL ARRAY WITH JUS 10 ELEMENTS 
      String[] numArr = {"one","two","three","four","five","six","seven","eight","nine","ten"};  

      //RANDOM NUMBER IS GENERATED BETWEEN 1 AND 10 
      Random randNum = new Random();  
      int curRandom = randNum.nextInt(9) + 0; //0 TO 9 || 1 TO 10 

      //CHOICE ARRAY 
      String[] choices = new String[ len ]; //LENGTH IS SET TO 4 

      //DISPLAY CURRENTLY GENERATED RANDOM NUMBER 
      System.out.println("Current Random Number: " + curRandom); 
      System.out.println("-------------------------"); 

      if(curRandom > 5){ 
       int aux = curRandom; 
       for(int i = 0;i<len;i++) { 
        choices[i] = numArr[aux]; 
        aux--; 
       } 
      } 
      else { 
       int aux = curRandom; 
       for(int i = 0;i<len;i++) { 
        choices[i] = numArr[aux]; 
        aux++; 
       } 
      } 


      //DISPLAY CHOICE ARRAY ELEMENTS FOR DUBUGGING 
      for(int j = 0; j < choices.length; j++) 
       System.out.println(choices[j]); 

输出:

Current Random Number: 2 
------------------------- 
three 
four 
five 
six