Untitled
unknown
java
5 months ago
5.3 kB
19
Indexable
import java.util.*; // Nimai Belur // 09/30/2024 // CSE 122 // C0: Warm Up // TA: Cora Supasatit // This class is a Music Box. It gives the user the power to compose their own song by entering // different notes and can find some of the most commonly used notes in the song public class MusicBox { public static final String NOTES = "CDEFGAB"; public static final String SHARP = "♯"; public static final String FLAT = "♭"; public static void main(String[] args) { Scanner console = new Scanner(System.in); String[][] song = composeSong(console); System.out.println("Returned song 2D array:"); for (int i = 0; i < song.length; i++) { for (int j = 0; j < song[0].length; j++) { System.out.print(song[i][j] + " "); } System.out.println(); } } // Behavior - Asks users to create a song by entering the number of melodies and their length, // and creates an accordingly sized array // Exceptions - N/a // Returns - String[][] - Returns a 2D array comprised of the notes entered by the user //Paramters - Scanner - Asks user for input about number of melodies and their length public static String[][] composeSong(Scanner input){ //gets number of melodies from user System.out.print("Enter the number of melodies: "); String melodies = input.nextLine(); int numMelodies = Integer.parseInt(melodies); //gets length of each melody from user System.out.print("Enter the length of each melody: "); melodies = input.nextLine(); int lenMelodies = Integer.parseInt(melodies); System.out.println(); //Creating empty 2D array of notes to be filled with fillBoard String[][] songArray = new String[numMelodies][lenMelodies]; //calls fillBoard to add in the notes for each song return fillBoard(input, songArray); } // Behavior - Asks users to enter notes and places them into a 2D array // Exceptions - N/a // Returns - String[][] - Returns a 2D array comprised of the notes entered by the user // Paramters - Scanner - Asks user for input about what notes should be entered into the array // String[][] - Takes in an empty array that has the correct amount of rows for number melodies // and columns for length of the melodies public static String[][] fillBoard(Scanner object, String[][] songArray){ for(int i=0; i<songArray.length; i++){ //Shows users which melody is being composed System.out.println("Composing melody #" + (i+1)); for(int j=0; j<songArray[0].length; j++){ //Shows which note the user is entering System.out.print(" Enter note #" + (j+1) +": "); String note = object.nextLine(); //Add note to array songArray[i][j]=note; } System.out.println(); } return songArray; } // Behavior - Finds the most common naturals within the song // Exceptions - N/a // Returns - String[] - Returns an array of the most common naturals within each line of the song // Paramters - String[][] - Takes in a 2D array of notes that make up a song public static String[] mostCommonNaturals(String[][] song){ //Array has size song.length to represent every line of the song String[] commonNotes = new String[song.length]; for(int k=0; k<song.length; k++){ int[] noteCounts = countNotes(song[k]); commonNotes[k] = mostCommonNote(noteCounts); } return commonNotes; } // Behavior - Counts the number of times each note occurs in the given line of the song // Exceptions - N/a // Returns - int[] - Returns an array with the number of times that each note occurs in the line // Paramters - String[] - Array of notes that make up the line of the song public static int[] countNotes(String[] songLine){ int[] noteCounts = new int[NOTES.length()]; for(int k=0; k<songLine.length; k++){ //checks if the given note is in NOTES (is a natural note) if(NOTES.contains(songLine[k])){ //Increments noteCounts according to the position of the given note within NOTES noteCounts[NOTES.indexOf(songLine[k])]++; } } return noteCounts; } // Behavior - Finds the most repeated note within the array of notes // Exceptions - N/a // Returns - String - Returns the note that is repeated the most within the array of note Counts // Paramters - int[] - Array containing the amount of times that each note occurs within a line public static String mostCommonNote(int[] noteCounts){ int max=0; int maxIndex=0; for(int i=0; i<noteCounts.length; i++){ //Finds the maximum count and the corresponding index if(noteCounts[i]>max){ max=noteCounts[i]; maxIndex=i; } } //Uses maxIndex to return the note that corresponds to the max index return NOTES.substring(maxIndex, maxIndex+1); } }
Editor is loading...
Leave a Comment