简体   繁体   中英

how do i match the index of two parallel arrays?

i have a list in a text file that alternates between name and age. there are 9 names and 9 ages.

i need my program to display

Person (insert name here) has the highest age: (insert age here).

here is my code so far:

     public class Names 
     {


public static void main(String[] args) throws Exception
{

      // get textfile
      Scanner input = new Scanner( new File("names_and_ages.txt") );


final String[] names= new String[9];
final int[] ages= new int[9];
int counter = 0;

while (input.hasNext()) //while not end-of-file
{
    names[counter]=input.next();  
    ages[counter]=Integer.parseInt(input.next());
    counter++;

}
highestAge(names, ages);
input.close();
}//end of main

public static void highestAge (String[] name, int[] age)
{
    String name;
int count = 0;
int oldest = highestAge[count];
for ( int number: highestAge)
{
    if (number > oldest)
        {
        oldest = number;
        }
}
System.out.print("Person " + name + " has the highest age: " + oldest );
}//end of Size method

}//end of class

everything compiles i just can't seen to make the name match the age. help?

If you created a Person class, you could save yourself the trouble of managing two arrays.

This would be your Person class:

class Person {
    String name;
    int age;
}
public static void highestAge(String[] names, int[] ages)
{
    //SET SENSIBLE DEFAULTS TO oldest AND index
    int index = 0;
    int oldest = ages[0];
    //Looping based on index
    for (int i = 0;  i < ages.length; i++)
    {
        if (ages[i] > oldest)
        {
           index = i;
           oldest = ages[i];
        }
}
System.out.print("Person " + names[index] + " has the highest age: " + ages[index] );
}//end of Size method

You're not far off. You need to maintain an "index" to the oldest age, which you can then use to reference between the two arrays.

public static void highestAge (String[] names, int[] ages)
{
    String name
    int oldest = 0;
    int oldestIndex = -1;
    for (int index = 0; index < ages.length; index++) 
    {
        if (ages[index] > oldest)
        {
            oldest = number;
            oldestIndex = index;
        }
    }
    System.out.print("Person " + names[oldestIndex] + " has the highest age: " + oldest );
}//end of Size method

Also, I don't know how your example compiles, I don't see the array highestAge declared any where :P

Personally, I'd create a Person class that has the name and age as fields...

public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

I would then create a new Person on each iteration of the loop and add them to an array of people ( Person[] people = new Person[...] ) (actually, I'd use an implementation of a java.util.list but that's me)

You suddenly get a whole lot of creativity opening up for you.

You could provide a isOlderThen(Person person) method to compare people together.

if (person.isOlderThen(oldest)) {
    oldest = person;
}

You actually just sort the array based on the age of each person, using Arrays.sort and a Comparator

1) create a class

class person
{
   String name;
   int    age;
}

2) create only one array: Person[] persons

3) Rewrite the method highestAge

Person getOldest( Person[] persons )
{
   Person oldest = null;
   for( Person person : persons )
   {
      if( oldest == null || person.age > oldest.age )
      {
         oldest = person;
      }
   }
   return oldest;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM