【发布时间】:2014-04-14 07:17:06
【问题描述】:
所以我的程序应该访问一个文本文档,然后执行所有当前有效的爵士乐。我无法弄清楚的唯一问题是如何打乱数组的内容而不让它们最终彼此重叠。互联网和随机循环和 for 循环的多次尝试都没有结果。这是我的代码:
import java.io.*;
import java.util.*;
public class lab_6 {
public static void main(String[] args)throws FileNotFoundException {
Scanner input = new Scanner(System.in); //reads from keyboard
System.out.println("What is the name of your file. ");
String name = input.nextLine();
Scanner reader = new Scanner(new File(name));// Open text file
System.out.println("how many names are in your array");
int num = input.nextInt();
String[] names = new String[num];
for (int index = 0; index< names.length; index++)
{
names[index] = reader.nextLine();// Gets a line while there is one
}
System.out.println("\nOriginal List");
printList(names);
System.out.println("\nShuffled List");
shuffle(names);
printList(names);
System.out.println("\nSorted List");
Arrays.sort(names); // this is a built in method
printList(names);
System.out.println("What name are you looking for");
Scanner input1 = new Scanner(System.in); //reads from keyboard
String find = input1.nextLine();
int index = search(names,find);
if(index == -1)
System.out.println("The name was not there");
else
System.out.println(find+" was found at position "+index);
System.out.println("The average length of all the names is "+averageLength(names));
}
public static void printList(String[] array) // print the list of names numbered
{
for (int i=0; i<array.length; i++)
{
System.out.println((i+1)+") "+ array[i]);
}
}
public static void shuffle (String[] array) // mix-up the array
{
}
public static int search(String[] array, String find)
{
for(int i=0; i<array.length; i++) {
if (array[i].equals(find) ) return i;
}
return -1;
}
public static double averageLength(String[] array) //return the average length of the names
{
int sum=0;
for (int i=0; i<array.length; i++)
{
int l= array[i].length();
sum +=l;
}
int average = sum/(array.length);
return average;
}
}
【问题讨论】:
-
如何随机读取数据(索引),而不是随机排列数组?
-
我该怎么做呢? @parsaporahmad
-
如何使用 ArrayList stackoverflow.com/a/716619/2399024
-
注意:在 Java 7 中,您可以使用
Files.readAllLines(),这将从输入文件中读取所有行并将它们全部放入List<String> -
几个答案建议使用集合,确实有一个现成的洗牌,但它只是在幕后使用 Fisher-Yates,如果您已经将数据放在大批。另一方面,在 Java Collections API 中使用经过测试的版本意味着您可能会出错。
标签: java arrays random shuffle