我写了一个程序,根据我输入的年龄和名字找到最年长和最年轻的人。问题是,程序只给我最老的人,否则最小的语句就不会执行。
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);
答案 0 :(得分:1)
您的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);
答案 1 :(得分:0)
我会说这是将它分成两种方法的最佳做法 - 一种是最年轻的,另一种是最年长的。对于可能会查看您的代码的其他开发人员来说,这一点很清楚。 如果这不是一个选项,您可以使用Pair来返回两个值。它意味着键和值,但它使您能够返回2个值。
答案 2 :(得分:0)
你的算法有一些怪癖,也许你不知道。您的阵列年龄已默认初始化。如果你知道自己在做什么,那不一定是坏事,但在这种情况下,你似乎并没有。您正在使用列表中没有的值初始化最小值和最大值。
我的建议是将值的记录与值的计算分开。
编辑:我的意思是这个词。GET index_1/doc_type/_search
{
"query" :
{"match": {"name": "A B C"}}
}