将随机生成的排序数组作为String返回。怎么样?

时间:2016-03-01 18:59:56

标签: java

我正在尝试编写一个将String返回给main方法的类。字符串应该包含从1-99开始的6个随机生成的数字,并且这些数字应该在返回之前进行排序。然而它根本不起作用,我整天坐着试图解决这个问题。我是Java的新手,我宁愿放弃它,但它是我大学的一门课。代码如下所示:

package lab1;

import java.util.Random;
import java.util.Scanner;

public class Lab111 {

    private String rad;

    public String getLottorad() {

        Random r = new Random();
        int[] tal = new int[6];

        for (int i = 0; i < 6; i++) { //generating 6 numbers
             tal[i] = r.nextInt(99)+1;
        }
        int i,j,crap;
        for(i=0;i<100;i++) { //trying to sort the generated numbers
           for(j=i+1;j<100;j++) {
               if(tal[i]>tal[j]) {
                  crap=tal[i];
                  tal[i]=tal[j];
                  tal[j]=crap;                
               }
            }
         }
         rad = String.valueOf(tal[i]); /*trying to turn the sorted numbers into an int*/
        return rad;
    }

    public static void main(String[] args) {
        System.out.print("How many lottery lines do you want? :");
        Scanner tgb = new Scanner(System.in);
        int antal = tgb.nextInt();
        Lab111 l = new Lab111();
        for (int i = 0; i < antal; i++)
            System.out.println(l.getLottorad()); // printing the sorted strings 
    }
}

如果有人能够解释我做错了什么,那将非常感激。我和一个同级别的同学一整天都在撕扯我们的头发。

4 个答案:

答案 0 :(得分:2)

  1. 生成六个随机值的列表。你似乎明白这一点。
  2. 对列表进行排序。考虑Collections.sort方法。
  3. 遍历列表(考虑每个构造的java)并构建逗号分隔的值列表(读取Apache Commons Lang 3 StrBuffer,注意appendSeparator)。
  4. 返回StrBuffer.toString();
  5. 注意:列表不是数组。阅读List

答案 1 :(得分:2)

你可以使用数组进行更多的工作,而我建议使用集合。

您需要什么:

  1. 定义一个集合,因为您不想生成重复的数字
  2. 在集合中添加一些随机数,直到集合的大小为6
  3. 现在从该集创建一个列表,我们需要这个因为列表是可排序的
  4. 对列表进行排序
  5. 打印
  6. 最终片段:

    Set<Integer> randomSet = new HashSet<Integer>();
    Random r = new Random();
    while (randomSet.size() < 6) {
        randomSet.add(r.nextInt(99) + 1);
    }
    
    List<Integer> listRandom = new ArrayList<Integer>(randomSet);
    Collections.sort(listRandom);
    System.out.println(listRandom);
    

    结果:

    6个1到99之间的随机数,没有重复,已排序。 :)

      

    [23,43,54,86,95,98]

答案 2 :(得分:1)

将数字放入一个字符串中:

    String rad="";
    for(int i=0;i<tal.length;i++){
        rad+=tal[i] + ", ";
    }
    return rad;

此处详细讨论了排序:Java: Sort an array

答案 3 :(得分:1)

使用Array并包含IntegerList,您可以通过这种方式从Collections六个随机生成的Arrays创建排序输出类

添加以下导入语句:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
    Random r = new Random();
    Integer[] tal = new Integer[6];

    for (int i = 0; i < 6; i++) {//generating 6 numbers
        tal[i] = r.nextInt(99)+1;
    }

    List<Integer> integerList = Arrays.asList(tal); // convert Array to List

    Collections.sort(integerList); // Sort list

    String rad = String.valueOf(integerList); // convert list to String

    return rad;

通过修改代码并创建这样的main方法:

public static void main(String[] args) {
    Random r = new Random();
    Integer[] tal = new Integer[6];

    for (int i = 0; i < 6; i++) {//generating 6 numbers
        tal[i] = r.nextInt(99)+1;
    }

    List<Integer> integerList = Arrays.asList(tal); // convert Array to List

    Collections.sort(integerList); // Sort list

    String rad = String.valueOf(integerList); // convert list to String

    System.out.println(rad);
}

我能够得到以下输出:

  

[27,42,58,67,79,89]

您可以从不使用Array并仅使用List开始进一步优化代码。

这就是优化的样子。

    Random r = new Random();
    List<Integer> integerList = new ArrayList<Integer>();

    for (int i = 0; i < 6; i++) {//generating 6 numbers
        integerList.add(r.nextInt(99)+1);
    }

    Collections.sort(integerList); // Sort list

    String rad = String.valueOf(integerList); // convert list to String

    return rad;

为了使此优化解决方案有效,您必须导入ArrayList

import java.util.ArrayList;