I need to have this prompt user for values instead of values already given. impo
ID: 3702429 • Letter: I
Question
I need to have this prompt user for values instead of values already given.
import java.util.Scanner; public class RecordingSort { public static void main(String[]args) { Scanner scanner = new Scanner(System.in); Recording[] recordings = new Recording[5]; recordings[0] = new Recording(); recordings[0].setArtist("Goo Goo Dolls"); recordings[0].setTitle("Name"); recordings[0].setSeconds(290); recordings[1] = new Recording(); recordings[1].setArtist("Goo Goo Dolls"); recordings[1].setTitle("Iris"); recordings[1].setSeconds(300); recordings[2] = new Recording(); recordings[2].setArtist("3 Doors Down"); recordings[2].setTitle("Here Without You"); recordings[2].setSeconds(280); recordings[3] = new Recording(); recordings[3].setArtist("Pearl Jam"); recordings[3].setTitle("Black"); recordings[3].setSeconds(270); recordings[4] = new Recording(); recordings[4].setArtist("Lifehouse"); recordings[4].setTitle("Hanging by a Moment"); recordings[4].setSeconds(260); System.out.println("Sorting fields"); System.out.println("1. Artist"); System.out.println("2. Title"); System.out.println("3. Seconds"); System.out.println("Please enter your choice (1-3)"); int choice = scanner.nextInt(); switch (choice) { case 1: sortByArtist(recordings); print(recordings); break; case 2: sortByTitle(recordings); print(recordings); break; case 3: sortBySeconds(recordings); print(recordings); break; } } private static void print(Recording[] recordings) { System.out.printf("%-20s%-20s%-10s ", "Artist", "Artist", "Seconds"); for (int index = 0; index < recordings.length; index++) { System.out.printf("%-20s%-20s%-5d ", recordings[index].getArtist(), recordings[index].getTitle(), recordings[index].getSeconds()); } } private static void sortBySeconds (Recording[] recordings) { Recording temp; for (int i = 0; i < recordings.length-1; i++) { for (int j = 0; j < recordings.length-1; j++) { if(recordings[j].getSeconds() > recordings[j+1].getSeconds()) { temp=recordings[j]; recordings[j]=recordings[j+1]; recordings[j+1]=temp; } } } } private static void sortByTitle (Recording[] recordings) { Recording temp; for (int i = 0; i < recordings.length-1; i++) { for (int j = 0; j < recordings.length-1; j++) { if (recordings[j].getTitle() .compareTo(recordings[j+1].getTitle())>0) { temp=recordings[j]; recordings[j]=recordings[j+1]; recordings[j+1]=temp; } } } } private static void sortByArtist (Recording[] recordings) { Recording temp; for (int i = 0; i < recordings.length-1; i++) { for (int j = 0; j< recordings.length-1; j++) { if (recordings[j].getArtist() .compareTo(recordings[j+1].getArtist())>0) { temp=recordings[j]; recordings[j]=recordings[j+1]; recordings[j+1]=temp; } } } } }
public class Recording { private String title; private String artist; private int seconds; public Recording() { title=""; artist=""; seconds=0; } public void setTitle(String title) { this.title=title; } public void setArtist(String artist) { this.artist=artist; } public void setSeconds(int seconds) { this.seconds=seconds; } public String getTitle() { return title; } public String getArtist() { return artist; } public int getSeconds() { return seconds; } }
Explanation / Answer
Here is the code you needed. Changed the hardcoded part to prompt user, receive values and fill the array. Continuously looped the menu to sort by title, artist or seconds. Drop a comment if you have any doubts or queries. Thanks
// RecordingSort.java
import java.util.Scanner;
public class RecordingSort {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/**
* Prompting the user to enter the number of records he wants to add
*/
System.out.println("How many records do you want to add?");
int n = Integer.parseInt(scanner.nextLine());
Recording[] recordings = new Recording[n];
String title, artist;
int secs;
/**
* looping for n times, getting input and filling the recordings array
*/
for (int i = 0; i < n; i++) {
System.out.printf("Song %d, enter title: ", (i + 1));
title = scanner.nextLine();
System.out.printf("Song %d, enter artist: ", (i + 1));
artist = scanner.nextLine();
System.out.printf("Song %d, enter length: ", (i + 1));
secs = Integer.parseInt(scanner.nextLine());
/**
* Creating a Recording object, setting values and adding to the
* array
*/
Recording recording = new Recording();
recording.setArtist(artist);
recording.setTitle(title);
recording.setSeconds(secs);
recordings[i] = recording;
}
/**
* letting user choose the sorting mode
*/
System.out.println(" Sorting fields");
System.out.println("1. Artist");
System.out.println("2. Title");
System.out.println("3. Seconds");
System.out.println("Please enter your choice (1-3)");
int choice = scanner.nextInt();
switch (choice) {
case 1:
sortByArtist(recordings);
print(recordings);
break;
case 2:
sortByTitle(recordings);
print(recordings);
break;
case 3:
sortBySeconds(recordings);
print(recordings);
break;
}
}
private static void print(Recording[] recordings) {
System.out.printf("%-20s%-20s%-10s ", "Artist", "Title", "Seconds");
for (int index = 0; index < recordings.length; index++) {
System.out.printf("%-20s%-20s%-5d ",
recordings[index].getArtist(),
recordings[index].getTitle(),
recordings[index].getSeconds());
}
}
private static void sortBySeconds(Recording[] recordings) {
Recording temp;
for (int i = 0; i < recordings.length - 1; i++) {
for (int j = 0; j < recordings.length - 1; j++) {
if (recordings[j].getSeconds() > recordings[j + 1].getSeconds()) {
temp = recordings[j];
recordings[j] = recordings[j + 1];
recordings[j + 1] = temp;
}
}
}
}
private static void sortByTitle(Recording[] recordings) {
Recording temp;
for (int i = 0; i < recordings.length - 1; i++) {
for (int j = 0; j < recordings.length - 1; j++) {
if (recordings[j].getTitle().compareTo(
recordings[j + 1].getTitle()) > 0) {
temp = recordings[j];
recordings[j] = recordings[j + 1];
recordings[j + 1] = temp;
}
}
}
}
private static void sortByArtist(Recording[] recordings) {
Recording temp;
for (int i = 0; i < recordings.length - 1; i++) {
for (int j = 0; j < recordings.length - 1; j++) {
if (recordings[j].getArtist().compareTo(
recordings[j + 1].getArtist()) > 0) {
temp = recordings[j];
recordings[j] = recordings[j + 1];
recordings[j + 1] = temp;
}
}
}
}
}
// Recording.java
public class Recording {
private String title;
private String artist;
private int seconds;
public Recording() {
title = "";
artist = "";
seconds = 0;
}
public void setTitle(String title) {
this.title = title;
}
public void setArtist(String artist) {
this.artist = artist;
}
public void setSeconds(int seconds) {
this.seconds = seconds;
}
public String getTitle() {
return title;
}
public String getArtist() {
return artist;
}
public int getSeconds() {
return seconds;
}
}
//OUTPUT
How many records do you want to add?
4
Song 1, enter title: Hello
Song 1, enter artist: Adele
Song 1, enter length: 300
Song 2, enter title: Ale ale
Song 2, enter artist: Zehry
Song 2, enter length: 270
Song 3, enter title: Iris
Song 3, enter artist: Goo Goo Dolls
Song 3, enter length: 290
Song 4, enter title: Black
Song 4, enter artist: Pearl Jam
Song 4, enter length: 326
Sorting fields
1. Artist
2. Title
3. Seconds
4. Exit
Please enter your choice (1-4)
2
Artist Title Seconds
Zehry Ale ale 270
Pearl Jam Black 326
Adele Hello 300
Goo Goo Dolls Iris 290
Sorting fields
1. Artist
2. Title
3. Seconds
4. Exit
Please enter your choice (1-4)
4