我正在尝试编写一个包含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
任何帮助都会很棒,我知道我忽略了某些事情或做错了事。
答案 0 :(得分:2)
你不应该在main方法的末尾调用outputArray吗?
答案 1 :(得分:1)
你的一个问题是:
new PrintStream(output).println(randomizeArray(numbers));
这可能会打印出类似的内容:
[I@10769dd
是?你需要写一个for循环来输出数字,比如:
for (int i=0; i < numbers.length; i++) {
new PrintStream(output).println(numbers[i]);
}
除了你不想每次都在循环中创建PrintStream。
答案 2 :(得分:1)
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;
答案 3 :(得分:1)
您的main方法初始化一个包含201个元素(而不是200个)的数组,并且不对此数组执行任何操作。显然,没有随机化,现在写入任何文件。主要方法应调用randomizeArray
,然后调用outputArray
。
main中数组元素的初始化是无用的,因为元素将由randomizeArray
方法重新初始化。顺便说一下,这种方法不需要返回任何东西。
最后,outputArray
方法应循环遍历数组并打印每个元素。流应该在finally块中关闭。它也不应该返回任何东西。
答案 4 :(得分:0)
忍不住......
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);
}