Вывод рандомизированного массива в файл - PullRequest
2 голосов
/ 30 ноября 2011

Я пытаюсь написать программу, которая принимает массив из 200 чисел (1-200), рандомизирует их, а затем выводит эти числа в текстовый файл.

Я боролся зацелый день, и я не могу понять, почему ничего не работает.

Основной метод:

public static void main (String[] args) 
{
    int[] numbers= new int [201];

    for (int i=0; i < numbers.length; i++)
    {
        numbers[i]=i;

    }
}//end main method

Метод рандомизации:

public static int[] randomizeArray(int[] numbers) 
{
    Random gen= new Random(10);

    for (int i=0; i < numbers.length; i++)
    {
        int n= gen.nextInt(200);
        numbers[i]=n;
    }

    return numbers;

}//end randomizeArray method

И метод печати:

public static int[] outputArray(int[] numbers) throws IOException
{

    FileOutputStream output;

    output= new FileOutputStream("RandomOut.txt");

    new PrintStream(output).println(randomizeArray(numbers));

    output.close();

    return numbers;

}//end method outputArray

Любая помощь будет отличной, я знаю, что что-то упускаю из виду или что-то делаю неправильно.

Ответы [ 5 ]

2 голосов
/ 30 ноября 2011

Разве вы не должны вызывать outputArray в конце вашего основного метода?

1 голос
/ 30 ноября 2011

Ваш метод main инициализирует массив из 201 элемента (вместо 200) и ничего не делает с этим массивом.Итак, очевидно, что нет рандомизации и теперь запись в любой файл.Основной метод должен вызвать randomizeArray, а затем outputArray.

Инициализация элементов массива в main бесполезна, поскольку элементы будут повторно инициализированы методом randomizeArray.Этот метод, кстати, не должен ничего возвращать.

Наконец, метод outputArray должен циклически проходить по массиву и печатать каждый элемент.Поток должен быть закрыт в блоке finally.Он также ничего не должен возвращать.

1 голос
/ 30 ноября 2011

1) вам нужно использовать Arrays.toString(int[] arr) для печати этого массива.

2) если вы хотите изменить порядок ввода массива, то для этого требуется код, который сильно отличается.в противном случае избавьтесь от ввода и используйте новый массив.

3) вызовите вспомогательные методы!

РЕДАКТИРОВАТЬ: добавлен этот псевдокод:

boolean[] used=new boolean[200];
make old[] and new[]
for(i=0;i<200;i++){
    int n=random number from 0 to 199;
    while(used[n]) n=(n+1)%200;
    new[i]=old[n];
    used[n]=true;
}
return new;
1 голос
/ 30 ноября 2011

Одной из ваших проблем является строка:

new PrintStream(output).println(randomizeArray(numbers));

Это, вероятно, напечатает что-то вроде:

[I@10769dd

да? Вам нужно написать цикл for для вывода чисел, что-то вроде:

for (int i=0; i < numbers.length; i++) {
    new PrintStream(output).println(numbers[i]);
}

за исключением того, что вы не хотите создавать PrintStream каждый раз в цикле.

0 голосов
/ 30 ноября 2011

Не смог устоять ...

    String filename = "random200.txt";
    List<Integer> numbers = new ArrayList<Integer>();
    for (int i = 1; i < 201; i++)
    {
        numbers.add(i);
    }
    StringBuilder sb = new StringBuilder();
    while (!numbers.isEmpty())
    {
        int position = new SecureRandom().nextInt(numbers.size());
        Integer randomNumber = numbers.remove(position);
        sb.append(randomNumber + "\n");
    }
    try
    {
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), "UTF8"));
        out.append(sb.toString());
        out.close();
    }
    catch (Exception ex)
    {
        throw new RuntimeException(ex);
    }
...