我的作业要求我制作一个电视节目,我可以输入节目,删除,修改和排序。我坚持的是分拣部分。该程序提示用户输出节目的名称,新剧集的首日和时间,它们存储在数组中。它按键名,日期和时间(按字母顺序和数字顺序)排序。
程序提示用户输入其中一个键,然后程序需要按该键对节目进行排序(按日排序将按字母顺序排序)。
我创建了一个类并使用数组来保存输入的节目。这是班级:
public class showInfo
{
String name;
String day;
int time;
}
我输入了这样的节目:
public static void addShow() throws IOException
{
//initialize counter
int i = 0;
arr = new showInfo[i];
showInfo temp = new showInfo();
//input information
do
{
System.out.print("Enter the name of show: ");
String showName = br.readLine();
temp.name = showName;
System.out.print("Enter which day of the week a new episode premieres: ");
String showDay = br.readLine();
temp.day = showDay;
System.out.print("Enter time in 24-hour format (e.g. 2100, 1900): ");
int showTime = Integer.valueOf(br.readLine()).intValue();
temp.time = showTime;
i++;
System.out.print("Would you like to add another show? (y/n) ");
}
while((br.readLine().compareTo("n"))!=0);
}
为了按时间排序,我写了以下方法:
public static void timeSort()
{
int min;
for (int i = 0; i < arr.length; i++)
{
// Assume first element is min
min = i;
for (int j = i+1; j < arr.length; j++)
{
if (arr[j].time < arr[min].time)
{
min = j;
}
}
if (min != i)
{
int temp = arr[i].time;
arr[i].time = arr[min].time;
arr[min].time = temp;
}
}
System.out.println("TV Shows by Time");
for(int i = 0; i < arr.length; i++)
{
System.out.println(arr[i].name + " - " + arr[i].day + " - " + arr[i].time + " hours");
}
}
我的问题是,当我调用它并将其输出到主屏幕时,它只显示“按时间显示电视节目”文本,但不显示节目。为什么是这样? (我应该显示我的完整代码吗?)
我认为我的问题与计数器有关,但我不确定我是如何解决的,因为用户应该输入尽可能多的节目,并且节目的数量已经修改,在其他方法中删除。
任何帮助都会很棒!提前谢谢!
答案 0 :(得分:2)
如果您未被禁止使用Java的Collections API,请使用Arrays.sort(T [],Comparator)。然后你的程序可以维护三个静态比较器对象 - 一个用于显示,一个用于一天,一个用于时间。如,
static Comparator<showTime> daySort = new Comparator<showTime>(){
public int compare(showTime st1, showTime st2){
return st1.day.compareTo(st2.day);
}
public boolean equals(Object o){
return this==o; /* Easy way out for this method. */
}
};
然后你有一个单一的排序方法(如果它甚至是必要的)调用Arrays.sort:
public static void sort(){
Arrays.sort(arr, daySort);
}
有关详细信息,请参阅Arrays和Comparator。
答案 1 :(得分:2)
我认为排序不起作用,因为ShowInfo[]
数组中没有要排序的元素。
您正在初始化ShowInfo
方法中的addShow
数组:
//initialize counter
int i = 0;
arr = new showInfo[i];
您正在创建新的ShowInfo
:
ShowInfo temp = new showInfo();
但是从未将temp
分配给任何数组元素。因此,每次调用此方法添加新的show
时,实际上是在创建一个长度为0的新ShowInfo[]
数组和一个从未分配给任何数组的ShowInfo
实例元件。
您只需要初始化数组/计数器一次,因此将数组/计数器initialization
代码与其使用分开(您不应将这些初始化语句保留在任何删除/修改/排序方法中):< / p>
private static int i=0;
private static ShowInfo[] arr=new ShowInfo[NO_OF_SHOWINFOS];
有了这些,您的addShow
方法就会变成这样:
public static void addShow() throws IOException
{
//initialize counter
//int i = 0;
//arr = new showInfo[i];
//showInfo temp = new showInfo();
//input information
do
{
showInfo temp = new showInfo();
System.out.print("Enter the name of show: ");
String showName = br.readLine();
temp.name = showName;
System.out.print("Enter which day of the week a new episode premieres: ");
String showDay = br.readLine();
temp.day = showDay;
System.out.print("Enter time in 24-hour format (e.g. 2100, 1900): ");
int showTime = Integer.valueOf(br.readLine()).intValue();
temp.time = showTime;
//i++;
arr[i++]=temp;
System.out.print("Would you like to add another show? (y/n) ");
}
while((br.readLine().compareTo("n"))!=0);
}
}