我已经写了一个程序,根据我输入的年龄和名字来寻找最年长和最年轻的人。问题是,程序只给我最年长的人,最年轻人的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);
3条答案
按热度按时间5cnsuln71#
你的算法有一些你不知道的怪癖。默认情况下,您的数组年龄已初始化。如果你知道你在做什么,这不一定是坏事,但在这种情况下,似乎你没有。您正在用列表中没有的值初始化最小值和最大值。
我的建议是把记录价值和计算价值分开。
编辑:我指的是这个词。
oymdgrw72#
你的
smallest
变量正在示例化为0
,因为您将其设置为age[0]
,它是一个整数数组,已初始化为其默认值0。试着把它设置为
age[0]
先把年龄作为输入,然后再比较。irlmq6kh3#
我认为最好的做法是把它分成两种方法——一种是取最小的,另一种是取最大的。其他可能会查看您的代码的开发人员将清楚地看到这一点。如果这不是一个选项,您可以使用pair来返回两个值。它的意思是键和值,但它允许您返回2个值。