Question

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

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

  • Create an object type Mammal to store the five properties for each mammal (be careful about picking data types). Assume that all five properties are needed to construct a Mammal object, and no properties should be changeable after construction. The object type should include "getters" for all 5 properties.
  • Create a program MammalSorter.java with a main method and supporting methods which perform the rest of the steps.
  • Read the input file mammals.txt line by line and create a corresponding array of Mammal objects in your program, one object per line.
  • Sort the array by 3 different properties:
    • By longevity (ascending: smallest firest)
    • By animal name (ascending)
    • By size (descending: largest first)
  • You must choose at least two different sorting algorithms. We've talked about and implement three: Bubble, Selection and Insertion. Choose a minimum of two (you'll have to re-use one if you only choose two). You can also choose to use one of each of the three for each of the sorts. It's up to you.
  • For each sort above, write the contents of the array to an output file. The names of the files should be (in the same order as above)
    • mammals-longevity-ascending.txt
    • mammals-name-ascending.txt
    • mammals-size-descending.txt
  • The format of the output files should be exactly the same as the input file: each of the 5 data values in the same order separated by commas
0 0
Add a comment Improve this question Transcribed image text
Answer #1
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:

Add a comment
Know the answer?
Add Answer to:
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
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT