[英]Outputting a randomized array to a file
我正在嘗試編寫一個程序,該程序采用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
任何幫助都將非常有用,我知道我忽略了某些事情或做錯了什么。
您不應該在main方法的末尾調用outputArray嗎?
您的問題之一是線路:
new PrintStream(output).println(randomizeArray(numbers));
這可能會打印出類似以下內容:
[I@10769dd
是? 您需要編寫一個for循環來輸出數字,例如:
for (int i=0; i < numbers.length; i++) {
new PrintStream(output).println(numbers[i]);
}
除了您不想在循環中每次都創建PrintStream之外。
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;
您的main方法會初始化201個元素的數組(而不是200個元素),並且對此數組不執行任何操作。 因此很明顯,沒有隨機化,現在可以寫入任何文件。 main方法應先調用randomizeArray
然后再調用outputArray
。
main中數組元素的初始化是沒有用的,因為元素將通過randomizeArray
方法重新初始化。 順便說一下,此方法不需要返回任何內容。
最后, outputArray
方法應該遍歷數組,並遍歷每個元素。 流應在finally塊中關閉。 它也不應該返回任何東西。
無法抗拒...
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.