mammals.txt squirrel,2,0.5,Herbivore,Sciurus griseus kangaroo,7,90,Herbivore,Macropus rufus gorilla,20,150,Herbivore,Gorilla beringei sea lion,12,250,Carnivore,Zalophus californianus guinea pig,4,3,Herbivore,Cavia porcellus whale (grey),70,36000,Herbivore,Eschrichtius robustus cat,12,4,Carnivore,Felis catus sheep,12,180,Herbivore,Ovis aries giraffe,10,1000,Herbivore,Giraffa mouse,3,0.04,Omnivore,Mus musculus puma,12,50,Carnivore,Puma concolor orca,50,4000,Carnivore,Orcinus orca beaver,5,20,Herbivore,Castor canadensis fox,7,6,Omnivore,Vulpes vulpes donkey,12,300,Herbivore,Equus asinus buffalo,15,650,Herbivore,Bison bison cow,15,700,Herbivore,Bos taurus baboon,20,40,Omnivore,Papio ursinus horse,20,500,Herbivore,Equus ferus caballus moose,12,450,Herbivore,Alces alces goat,9,90,Herbivore,Capra aegagrus hircus chimpanzee,20,45,Omnivore,Pan troglodytes bear (grizzly),25,270,Omnivore,Ursus arctos leopard,12,55,Carnivore,Panthera pardus camel,40,500,Herbivore,Camelus dromedarius rhinoceros,40,2000,Herbivore,Ceratotherium simum simum hippopotamus,25,1400,Herbivore,Hippopotamus amphibius opposum,1,4,Omnivore,Didelphis virginiana howler monkey,15,7,Herbivore,Alouatta palliata deer,8,55,Herbivore,Odocoileus virginianus elephant,65,4500,Herbivore,Elephas maximus dog,12,25,Carnivore,Canis lupus familiaris bat,15,1,Omnivore,Pteropus vampyrus wolf,5,40,Carnivore,Canis lupus zebra,15,300,Herbivore,Equus quagga elk,15,280,Herbivore,Cervus canadensis lion,15,160,Carnivore,Panthera leo bear (polar),20,450,Carnivore,Ursus maritimus chipmunk,6,0.1,Omnivore,Tamias striatus pig,15,250,Omnivore,Sus domesticus rabbit,5,3.5,Herbivore,Lepus townsendii bear (black),18,100,Omnivore,Ursus americanus tiger,16,400,Carnivore,Panthera tigris
You will be given a list of mammal information in a text file called mammals.txt (right-click to download). Each line will contain 5 pieces of data about a mammal: its name, the average longevity of that mammal (in years), the average size of that mammal (in kg), its diet (e.g. Omnivore, Carnivore, Herbivore), and its scientific name. Each value will be separated by a comma and the input file is guaranteed to be consistent; that is, each line will have exactly 5 data values separated by commas. You can assume the longevity will always be a whole number. The size of a mammal could be a decimal (e.g the average mass of a mouse is 0.04 kg). Here are some sample lines from the input file:
sheep,12,180,Herbivore,Ovis aries giraffe,10,1000,Herbivore,Giraffa mouse,3,0.04,Omnivore,Mus musculus puma,12,50,Carnivore,Puma concolor orca,50,4000,Carnivore,Orcinus orca
Note: as you will see in the input file, the data is in random order and not sorted by any particular data value.
Requirements
import java.io.*; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Scanner; // REQUIRED mammal class with required instance variables class Mammal { private String name; private int avgLongevity; private float avgSize; private String diet; private String scientificName; public Mammal(String name, int avgLongevity, float avgSize, String diet, String scientificName) { this.name = name; this.avgLongevity = avgLongevity; this.avgSize = avgSize; this.diet = diet; this.scientificName = scientificName; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAvgLongevity() { return avgLongevity; } public void setAvgLongevity(int avgLongevity) { this.avgLongevity = avgLongevity; } public float getAvgSize() { return avgSize; } public void setAvgSize(float avgSize) { this.avgSize = avgSize; } public String getDiet() { return diet; } public void setDiet(String diet) { this.diet = diet; } public String getScientificName() { return scientificName; } public void setScientificName(String scientificName) { this.scientificName = scientificName; } @Override public String toString() { return name + "," + avgLongevity + "," + avgSize + "," + diet + "," + scientificName; } } // mammal sorter public class MammalSorter { public static void main(String[] args) throws IOException { // define list List<Mammal> mammals = new ArrayList<>(); // read file and add to mammals Scanner fileScanner = new Scanner(new File("mammals.txt")); while (fileScanner.hasNextLine()) { String[] line = fileScanner.nextLine().split(","); mammals.add(new Mammal(line[0], Integer.valueOf(line[1]), Float.valueOf(line[2]), line[3], line[4])); } // map list to array and perform bubble sort and save to file Mammal[] mammalArr = new Mammal[mammals.size()]; mammals.toArray(mammalArr); bubbleSortByLongevity(mammalArr); writeToFile(mammalArr, "mammals-longevity-ascending.txt"); // map list to array and perform selection sort and save to file mammalArr = new Mammal[mammals.size()]; mammals.toArray(mammalArr); selectionSortByName(mammalArr); writeToFile(mammalArr, "mammals-name-ascending.txt"); // map list to array and perform insertion sort and save to file mammalArr = new Mammal[mammals.size()]; mammals.toArray(mammalArr); insertionSortBySize(mammalArr); writeToFile(mammalArr, "mammals-size-descending.txt"); fileScanner.close(); } private static void writeToFile(Mammal[] mammalArr, String filename) throws IOException { BufferedWriter fileWriter = new BufferedWriter(new FileWriter(filename)); for (Mammal mammal : mammalArr) { fileWriter.write(mammal.toString()); fileWriter.newLine(); } fileWriter.close(); } // insertion sort by mammel size static void insertionSortBySize(Mammal[] mammalArr) { for (int i = 1; i < mammalArr.length; ++i) { Mammal key = mammalArr[i]; int j = i - 1; while (j >= 0 && mammalArr[j].getAvgSize() < key.getAvgSize()) { mammalArr[j + 1] = mammalArr[j]; j = j - 1; } mammalArr[j + 1] = key; } } // bubble sort by mammal avg longevity static void bubbleSortByLongevity(Mammal[] mammals) { for (int i = 0; i < mammals.length - 1; i++) { for (int j = 0; j < mammals.length - i - 1; j++) if (mammals[j].getAvgLongevity() > mammals[j + 1].getAvgLongevity()) { Mammal temp = mammals[j]; mammals[j] = mammals[j + 1]; mammals[j + 1] = temp; } } } // selection sort by mammal avg longevity static void selectionSortByName(Mammal[] mammals) { for (int i = 0; i < mammals.length - 1; i++) { int min_idx = i; for (int j = i + 1; j < mammals.length; j++) if (mammals[j].getName().compareTo(mammals[min_idx].getName()) < 0) min_idx = j; Mammal temp = mammals[min_idx]; mammals[min_idx] = mammals[i]; mammals[i] = temp; } } }
mammals-longevity-ascending.txt:
mammals-name-ascending.txt:
mammals-size-descending.txt:
mammals.txt squirrel,2,0.5,Herbivore,Sciurus griseus kangaroo,7,90,Herbivore,Macropus rufus gorilla,20,150,Herbivore,Gorilla beringei sea lion,12,250,Carnivore,Zalophus californianus guinea pig,4,3,Herbivore,Cavia porcellus whale (grey),70,36000,Herbivor