I am trying to compare the two names in the baby array list if it is true it will return "Two babies in the array are the same" if false will return "No same baby in the array". But I just can't get it to work for the findTwoSameBabies method, it is supposed to compare all the names in the array and return the result.
import java.util.ArrayList;
import java.util.Scanner;
public class BabyClient {
private static Baby[] babies;
public static void main(String[] args) {
// Initialize ArrayList of Baby
ArrayList<Baby> babiesList = new ArrayList<>();
// Object of Scanner class to take input
Scanner input = new Scanner(System.in);
// Populating babies array list
for (int i = 0; i < 4; i ) {
// a.
getBabyDetails(babiesList, input);
}
// b.
printBabyDetails(babiesList);
// c.
System.out.println("\nThe average age of all babies in the array is " calculateAndPrintBabiesAverageAge(babiesList));
// d.
findTwoSameBabies(babiesList);
}
private static void getBabyDetails(ArrayList<Baby> babies, Scanner input) {
// get name and age of the baby
System.out.print("Enter name of baby: ");
String name = input.next();
System.out.print("Enter age of baby: ");
int age = input.nextInt();
input.nextLine();
// create an baby instance
Baby baby = new Baby(name, age);
// add baby to the list
babies.add(baby);
}
private static void findTwoSameBabies(ArrayList<Baby> babiesList) {
boolean sameBaby = false;
for (Baby babie : babiesList) {
for(int i=0;i<babiesList.size();i ) {
for(int j=i 1;j<babiesList.size();j ) {
if(babie.getName().equalsIgnoreCase(babiesList.size())) {
sameBaby = true;
break;//break from inner for loop j
}
}
if(sameBaby) {
break;//break from outer for loop i
}
}
}
if(sameBaby) {
System.out.println("Two babies in the array are the same");
}else {
System.out.println("No same baby in the array");
}
}
private static double calculateAndPrintBabiesAverageAge(ArrayList<Baby> babies) {
int totalAge = 0;
for (Baby babie : babies) {
totalAge = babie.getAge();
}
double averageAge = totalAge / babies.size();
return averageAge;
}
private static void printBabyDetails(ArrayList<Baby> babiesList) {
for(int i=0;i<babiesList.size();i ) {
System.out.println("Baby " (i 1) ": " babiesList.get(i).getName() ", " "Age: " babiesList.get(i).getAge());
System.out.println();
}
}
}
CodePudding user response:
There are many problems with your code.
- You have a most outer loop that iterates over the list, this is fine
- You have a loop inside this loop that iterates over with an index
- And an another, similar loop that goes ahead with one element from this element
- But then you compare a name of the baby you get first with the size of the array. This is a number, and if your baby is not called as like
42
then you always getfalse
in this case.
I honestly do not know what's your real job to do here. I assume this is a homework and you have to prove your loop programming skills. Given this assumption, I recommend you the following solution:
private static void findTwoSameBabies(ArrayList<Baby> babiesList) {
boolean sameBaby = false;
for (Baby baby1 : babiesList) {
for(int i=0;i<babiesList.size();i ) {
Baby baby2 = babiesList.get(i);
if(baby1.getName().equalsIgnoreCase(baby2.getName())) {
sameBaby = true;
break;//break from inner for loop i
}
}
if(sameBaby) {
break; // Break from the outer foreach loop
}
}
if(sameBaby) {
System.out.println("Two babies in the array are the same");
} else {
System.out.println("No same baby in the array");
}
}
- We iterate over the list elements in the outer loop
- And iterate over the same list in the inner loop
- We compare every baby with every other babies to check duplicates
- And break both loops if we found same names
CodePudding user response:
It's possible to convert the list to a set (a set can only contain unique values) and compare the length of the 2 list and the set, if it's not the same the list contains a double value, if it's the same it only contains unique items.
Set<Baby> babiesSet = new HashSet<>(babiesList);
if (babiesSet.size() != babiesList.size()) {
return "Two babies in the array are the same";
} else {
return "No same baby in the array";
}