java数组中最年轻和最老的

nnt7mjpx  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(236)

我已经写了一个程序,根据我输入的年龄和名字来寻找最年长和最年轻的人。问题是,程序只给我最年长的人,最年轻人的else if语句不执行。

public class Boo {

public static void main(String[] strings) {

  int[] age = new int[10];
  String[] name = new String[10];
  int count = 0;

  Scanner in = new Scanner(System.in);

  boolean notDone = true;

  int smallest = age[0];
  int largest = age[0];

  String smalName = "";
  String larName = "";

do {

  System.out.println("Enter name");
  name[count] = in.next();

  if (!name[count].equalsIgnoreCase("done")) {
    System.out.println("Enter age");
    age[count] = in.nextInt();

    if (age[count] > largest) {
      largest = age[count];
      larName = name[count];
    }
    else if (age[count] < smallest) {
      smallest = age[count];
      smalName = name[count];
    }

  }
  else if (name[count].equalsIgnoreCase("done")) {
    notDone = false;
  }

  count++;

}while(notDone && count < 3);
5cnsuln7

5cnsuln71#

你的算法有一些你不知道的怪癖。默认情况下,您的数组年龄已初始化。如果你知道你在做什么,这不一定是坏事,但在这种情况下,似乎你没有。您正在用列表中没有的值初始化最小值和最大值。
我的建议是把记录价值和计算价值分开。
编辑:我指的是这个词。

private class Person {
    String name;
    int age;
}

private Person enterPerson(Scanner sc) {
    Person person = null;
    String name = sc.next();
    if(name != "done) {
        int age = sc.nextInt();
        person = new Person();
        person.name = name;
        person.age = age;
    } 
    return person;
}

private Person youngest(List<Person> list) {
    Person youngest = null;
    for(Person person: list) {
        if(youngest == null || youngest.age > person.age) {
             youngest = person;
        }
    }
    return person;
}

// Oldest would be equivalent
oymdgrw7

oymdgrw72#

你的 smallest 变量正在示例化为 0 ,因为您将其设置为 age[0] ,它是一个整数数组,已初始化为其默认值0。
试着把它设置为 age[0] 先把年龄作为输入,然后再比较。

int smallest = age[0];
int largest = age[0];
do
{
  System.out.println("Enter name");
  name[count] = in.next();
  if (!name[count].equalsIgnoreCase("done"))
  {
    System.out.println("Enter age");
    age[count] = in.nextInt();

    if (count == 0)
    {
      smallest = age[0];
      largest = age[0];
      larName = name[0];
      smalName = name[0];
    }
    else
    {
      if (age[count] > largest)
      {
        largest = age[count];
        larName = name[count];
      }
      if (age[count] < smallest)
      {
        smallest = age[count];
        smalName = name[count];
      }
    }
  }
  else if (name[count].equalsIgnoreCase("done"))
  {
    notDone = false;
  }

  count++;

} while (notDone && count < 3);
irlmq6kh

irlmq6kh3#

我认为最好的做法是把它分成两种方法——一种是取最小的,另一种是取最大的。其他可能会查看您的代码的开发人员将清楚地看到这一点。如果这不是一个选项,您可以使用pair来返回两个值。它的意思是键和值,但它允许您返回2个值。

相关问题