[import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;
public class GazSongs {
public static void main(String[] args) throws FileNotFoundException {
// read in songs from input
String inFile = findArg(args, "-input"); //command line args
Scanner input = new Scanner(new File(inFile)); //scanner object
Songs[] songs = new Songs[37000]; //song array
int i = 0;
while (input.hasNextLine()) {
songs[i] = Songs.parse(input.nextLine());
i++;
SongCollection coll = new SongCollection(songs); //collection object
// filter as requested
String value = findArg(args, "-year"); //find year command line arg
if (value != null) {
coll.filterYear(Range.parse(value));
}
value = findArg(args, "-rank"); //find rank command line arg
if (value != null) {
coll.filterRank(Range.parse(value));
}
value = findArg(args, "-artist"); //find artist command line arg
if (value != null) {
coll.filterArtist(value);
}
value = findArg(args, "-title"); //find title command line arg
if (value != null) {
coll.filterTitle(value);
}
// sort as requested
value = findArg(args, "-sortby"); //find sortby command line arg
if (value != null) {
if (value.equalsIgnoreCase("year")) {
coll.sortYear();
} else if (value.equalsIgnoreCase("rank")) {
coll.sortRank();
} else if (value.equalsIgnoreCase("artist")) {
coll.sortArtist();
} else if (value.equalsIgnoreCase("title")) {
coll.sortTitle();
}
}
// output results
String outFile = findArg(args, "-output");
PrintStream output = new PrintStream(outFile);
output.print(coll);
}}
public static String findArg(String[] args, String target) { //parse command line arguments
for (String arg : args) {
String[] parts = arg.split(":");
if (parts[0].equalsIgnoreCase(target)) {
return parts[1];
}
}
return null;
}
}]
So this is the main that my teacher provided us, there are still some adjustments i need to do. But what we have to do is read from a file that has a length of about 37000 items. i have 3 classes to do this. but i am confused on how to filter it using
[public class SongCollection {
Songs[] music;
public SongCollection(Songs[] songs){
this.music = songs;
}
public void filterYear(Range r){
}
public void filterRank(Range r){
}
public void filterArtist(String s){
}
public void filterTitle(String s){
}
public void sortYear(){
}
public void sortRank(){
}
public void sortArtist(){
}
public void sortTitle(){
}
public String toString(){
}
}]
here are my other classes i have made
[public class Range {
public static Range parse(String s){
return null;
}
public int getMin(){
}
public int getMax(){
}
}]
[
public class Songs {
private int Year;
private int Rank;
private String Artist;
private String Title;
public static Songs parse(String s){ // parses Year\tRank\tArtist\tTitle
Songs newSongs = new Songs();
}
public int getYear(){
return this.Year;
}
public int getRank(){
return this.Rank;
}
public String getArtist(){
return this.Artist;
}
public String getTitle(){
return this.Title;
}
public String toString(){
}
}]
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;
public class GazSongs {
public static void main(String[] args) throws FileNotFoundException {
// read in songs from input
String inFile = findArg(args, "-input"); //command line args
Scanner input = new Scanner(new File(inFile)); //scanner object
Songs[] songs = new Songs[37000]; //song array
int i = 0;
while (input.hasNextLine()) {
songs[i] = Songs.parse(input.nextLine());
i++;
SongCollection coll = new SongCollection(songs); //collection object
// filter as requested
String value = findArg(args, "-year"); //find year command line arg
if (value != null) {
coll.filterYear(Range.parse(value));
}
value = findArg(args, "-rank"); //find rank command line arg
if (value != null) {
coll.filterRank(Range.parse(value));
}
value = findArg(args, "-artist"); //find artist command line arg
if (value != null) {
coll.filterArtist(value);
}
value = findArg(args, "-title"); //find title command line arg
if (value != null) {
coll.filterTitle(value);
}
// sort as requested
value = findArg(args, "-sortby"); //find sortby command line arg
if (value != null) {
if (value.equalsIgnoreCase("year")) {
coll.sortYear();
} else if (value.equalsIgnoreCase("rank")) {
coll.sortRank();
} else if (value.equalsIgnoreCase("artist")) {
coll.sortArtist();
} else if (value.equalsIgnoreCase("title")) {
coll.sortTitle();
}
}
// output results
String outFile = findArg(args, "-output");
PrintStream output = new PrintStream(outFile);
output.print(coll);
}}
public static String findArg(String[] args, String target) { //parse command line arguments
for (String arg : args) {
String[] parts = arg.split(":");
if (parts[0].equalsIgnoreCase(target)) {
return parts[1];
}
}
return null;
}
}]
So this is the main that my teacher provided us, there are still some adjustments i need to do. But what we have to do is read from a file that has a length of about 37000 items. i have 3 classes to do this. but i am confused on how to filter it using
[public class SongCollection {
Songs[] music;
public SongCollection(Songs[] songs){
this.music = songs;
}
public void filterYear(Range r){
}
public void filterRank(Range r){
}
public void filterArtist(String s){
}
public void filterTitle(String s){
}
public void sortYear(){
}
public void sortRank(){
}
public void sortArtist(){
}
public void sortTitle(){
}
public String toString(){
}
}]
here are my other classes i have made
[public class Range {
public static Range parse(String s){
return null;
}
public int getMin(){
}
public int getMax(){
}
}]
[
public class Songs {
private int Year;
private int Rank;
private String Artist;
private String Title;
public static Songs parse(String s){ // parses Year\tRank\tArtist\tTitle
Songs newSongs = new Songs();
}
public int getYear(){
return this.Year;
}
public int getRank(){
return this.Rank;
}
public String getArtist(){
return this.Artist;
}
public String getTitle(){
return this.Title;
}
public String toString(){
}
}]