我是学习Java的新手,对此有些困难。我应该使用堆栈来对导入文件的痕迹进行族谱分析。我已经阅读了文件,并使用了堆栈数组来保存对象。用户输入两个名称以查看是否存在关系。如果有,应该说有关系。我不知道我是否朝着正确的方向前进,所以我只是在寻求一点帮助。我并不是要别人为我编码,我只是想从建议中学习。到目前为止,这是我的代码。
import java.io.*;
import java.util.*;
public class TracingGenealogies
{
public static void main(String[] args) throws FileNotFoundException
{
File file = new File("genealogy.txt");
Scanner inputFile = new Scanner(file);
Scanner keyboard = new Scanner(System.in);
String childName;
int numChildren;
int numLines;
int counter = 0;
String parentName;
numLines = inputFile.nextInt();
Stack[] arr = new Stack[numLines];
while (inputFile.hasNext())
{
Stack stack = new Stack();
stack.push(inputFile.next());
numChildren = inputFile.nextInt();
for (int i = 0; i < numChildren; i++)
{
stack.push(inputFile.next());
}
arr[counter] = stack;
counter++;
}
System.out.println("Enter 2 names to see if they are a descendant.");
System.out.println("Enter the parent name: ");
parentName = keyboard.nextLine();
System.out.println("Enter a childs name: ");
childName = keyboard.nextLine();
我正在读取的文件如下:
10
Al 3 Beth Carol Dino
Beth 1 Pablo
Carol 3 Ben Alex Mary
Dino 0
Pablo 2 Angela Miguel
Ben 0
Alex 0
Mary 0
Angela 0
Miguel 0
任何帮助将不胜感激
答案 0 :(得分:0)
这是通过数据结构查找特定父母的孩子的代码。为了找到关系,您必须了解有关数据的一些特征。首先是识别父级与子级,父级的堆栈大小大于1。如果堆栈的大小为1,则说明您有一个孩子。因此,您需要搜索所有父级,而忽略子级堆栈。接下来就是简单地循环堆栈,直到找到孩子的名字或找不到孩子的名字为止。
尝试一下
//loop the array of stacks
for(int index = 0; index < arr.length; index++)
{
Stack curStack = arr[index];
boolean foundChild = false;
//a stack with a size > 1 means we have a parent and then we check if it's the parent we want
if(curStack != null && curStack.size() > 1 && curStack.peek().equals(parentName))
{
curStack.pop(); //remove the parents name from the stack
//search the parent stack for the child's name
while(!(foundChild = curStack.peek().equals(childName)) && curStack.size() > 0)
{
curStack.pop(); //remove the name
}
}
if(foundChild)
{
System.out.println(parentName + " has the child named " + childName);
}
}