Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

import java.util.List; import java.util.Stack; import java.util.ArrayList; impor

ID: 3823104 • Letter: I

Question

import java.util.List;
import java.util.Stack;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class IterativeExample2 {

private static void printFriends(Friend friend, int distance) {
/** if (distance == 0) {
System.out.println(friend);
} else {
for (Friend f : friend.getFriends()) {
printFriends(f, distance - 1);
}
}
**/
  
}
  

/**
* @param args
*/
public static void main(String[] args) {
List<Friend> friendList = new ArrayList<Friend>();

Friend reuben = new Friend("Reuben");
Friend soumitra = new Friend("Soumitra");
Friend ken = new Friend("Ken");
Friend elisa = new Friend("Elisa");
Friend isaac = new Friend("Isaac");

friendList.add(reuben);
friendList.add(soumitra);
friendList.add(ken);
friendList.add(elisa);
friendList.add(isaac);

reuben.addFriend(soumitra);
reuben.addFriend(ken);

soumitra.addFriend(reuben);

ken.addFriend(reuben);
ken.addFriend(elisa);

elisa.addFriend(ken);
elisa.addFriend(isaac);

isaac.addFriend(elisa);

BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
String inputName = "";
String inputValue = "";
Friend inputFriend = null;
int inputInt = 0;

System.out.println("Blank entry at any prompt exits program.");

while (true) {
System.out.print("Enter a person's name: ");
try {
inputName = inputReader.readLine();
} catch (IOException e) {
System.err.println("Error reading from console.");
}

if (inputName.equals("")) {
System.out.println("Run complete.");
System.exit(0);
}

inputFriend = new Friend(inputName);

if (friendList.contains(inputFriend)) {
inputFriend = friendList.get(friendList.indexOf(inputFriend));
System.out.print("Enter a non-negative integer: ");
try {
inputValue = inputReader.readLine();
} catch (IOException e) {
System.err.println("Error reading from console.");
}

if (inputValue.equals("")) {
System.out.println("Run complete.");
System.exit(0);
}

try {
inputInt = Integer.valueOf(inputValue);
} catch (NumberFormatException e) {
System.err.println("Must enter integer.");
continue;
}

if (inputInt < 0) {
System.out.println("Must be non-negative");
} else {
printFriends(inputFriend, inputInt);
}
} else {
System.out.println(inputFriend + " not found.");
}
}
}
}

import java.util.ArrayList;
import java.util.List;

public class Friend {
   private String name;
   private List<Friend> friendList = new ArrayList<Friend>();

   public Friend(String name) {
       this.name = name;
   }

   public void addFriend(Friend friend) {
       this.friendList.add(friend);
   }

   protected List<Friend> getFriends() {
       return this.friendList;
   }

   public String toString() {
       return this.name;
   }

   @Override
   public boolean equals(Object o) {
       if (o instanceof Friend) {
           return this.name.equals(((Friend) o).name);
       }
       return false;
   }
}

How to convert recursive to iterative in the comment of the first class

Explanation / Answer

The iterative version is given below: Here we have converted the recursion version into the normal for-loop with if-else condition.

private static void printFriends(Friend friend, int distance) {
      for (Friend f : friend.getFriends())
      {
       if (distance == 0) {
            System.out.println(friend);
        }
       else
       {
           distance--;
       }
      }
      
    }