【问题标题】:Need to print out max value of an array and the name of which index holds the highest value需要打印出数组的最大值以及哪个索引的名称保存着最大值
【发布时间】:2014-07-23 17:14:20
【问题描述】:

所以我的程序的目的是为 5 个销售人员创建一个数组。提示用户输入每个人的总销售额。然后,我需要打印总和、平均、最低销售额和最高销售额。我可以得到平均值,即所有销售额的总和,并设法打印出数组的最大值,但我需要说明,例如,销售人员 2 的销售额为 50,000 美元。我现在所拥有的是“50,000 有 50,000 美元”,如果这样的话。所以数组的值 3(销售人员 2,因为我没有包括销售人员 0)是 50,000。我的数组:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    final int SALESPEOPLE = 6;
    int[] sales = new int[SALESPEOPLE];
    int sum;

    for (int i = 1; i < sales.length; i++) {
        System.out.print("Enter sales for salesperson " + i + ": ");
        sales[i] = scan.nextInt();
    }
}

以及获取最大值

for (int i = 1; i < sales.length; i++) {
    System.out.println(i + " \t" + sales[i]);
    sum += sales[i];
}

System.out.println("The highest sale was");
int maxValue = getMaxValue(sales);
int maxValueName = getMaxValueName(sales);
System.out.println("Name: " + maxValueName + "Sale: " + maxValue);

System.out.println("The lowest sale was");
int minValue = getMinValue(sales);
System.out.println(minValue);

最大值

public static int getMaxValue(int[] array) {
    int maxValue = array[1];
    for (int i = 1; i < array.length; i++) {
        if (array[i] > maxValue) {
            maxValue = array[i];
        }
    }
    return maxValue;
}

public static int getMaxValueName(int[] array) {
    int maxValueName = array[1];
    for (int i = 1; i < array.length; i++) {
        if (array[i] > maxValueName) {
            maxValueName = array[i];
        }
    }
    return maxValueName;
}

【问题讨论】:

  • 由于getMaxValueName 的代码与getMaxValue 相同,只是改变了一些变量名,所以它当然会返回相同的结果。
  • 事实上,这里最初显示的代码中没有任何地方可以存储销售人员的姓名。程序不可能打印出它从未有过的数据。
  • 问题是我需要打印出数组中销售额最大的销售员
  • @KieranHughes 如果您希望getMaxValueName 返回具有最高值的销售人员的“姓名”或 ID 号,您必须修复它。现在,您设置了maxValueName = array[i],这意味着maxValueName 将保持最高值(称它为Name 并不能使编译器神奇地找到名称)。所以如果你想让它成为一个名字而不是一个值,你会如何改变方法?
  • 改方法getMaxValueName?

标签: java arrays


【解决方案1】:

您的销售团队中有一些人员。这些人中的每一个都有一个名字,并且也做了一些销售额(某种数字)。所以在你的数组中只存储一个数字是没有意义的。

定义一个对象类型,它包含一个字符串(一个人的名字)和一个数字(他们卖了多少)。那是您应该放入数组中的对象。用 Java 编写然后不使用任何带有面向对象设计暗示的东西是没有意义的。

请注意,一旦您拥有这些对象的数组,如果您可以找到具有最高销售数字的对象,那么您也找到了具有您要打印的人的姓名的对象。现在问问自己,为什么要编写两个单独的函数,每个函数都必须搜索数组才能找到该对象。

【讨论】:

  • 销售量由用户在代码运行时输入。我怎样才能打印出数组的值?就像,1 50000 出现了,但我希望它以正确的格式显示 ("Salesperson" + maxName + "has $" + maxValue);
  • 程序还必须以某种方式从用户那里获取每个销售人员的姓名作为输入。如果你从不告诉程序任何人的名字,它就不能告诉你最大卖家的名字——除非你的销售人员碰巧被命名为“1”、“2”、“3”、“4”和“5”。
  • 顺便说一句,很多年前,在查理布朗漫画中有一个角色叫 5 ...
  • 那么,我应该为 5 个不同的名称创建另一个数组吗?也许如果我发布我试图回答的问题会有所帮助,因为我认为我们不应该这样做。 1)查找并打印最大销售额。打印具有最高销售额的销售人员的 ID 和销售额,例如,“销售人员 3 的销售额最高,为 4500 美元。”请注意,您不需要另一个循环;您可以在读取值并计算总和的同一循环中执行此操作。
  • 啊哈,混淆的根源是“名称”一词的使用。您仍然可以使用对象从 Java 中的一个函数同时返回两件事(ID 和销售编号)。但是几乎没有人只是在 Java 中添加一个对象来输出文本。相反,人们从对象中读取较小的数据片段并将这些片段放在输出文本中的所需位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 2016-02-24
  • 2012-02-17
  • 2020-03-10
  • 2020-07-02
  • 2013-01-11
相关资源
最近更新 更多