【问题标题】:Java: Element finding through the index of another elementJava:通过另一个元素的索引查找元素
【发布时间】:2018-01-17 03:15:05
【问题描述】:

我有一个要解决的练习题。我将三个数组接受到一个方法中。姓名、年龄和薪水。我将使用显示薪水、姓名和年龄的 string.format 返回

数组的长度相同,并且每个数组中的对应元素是相关的。我应该找到最低的薪水,并用它来得到相应的人的姓名和年龄。

我能够找到最低的薪水,但我对如何获得相应的姓名和年龄感到困惑。

提前谢谢你

编辑:如果我通过这段代码找到了最小的薪水,那么获取这个索引并使用该索引获取对应元素的函数是什么:

public static String getSmallestSalaryString(String[] names, int[] ages, double[] salaries ) {

double smallSal = Integer.MAX_VALUE;    

for(int i = 0; i < salaries.length; i++) {

    if(smallSal > salaries[i]) {
        smallSal = salaries[i];
    }       
}

【问题讨论】:

  • 只需使用相同的索引来访问其他数组。
  • 请发布您当前(工作)的代码,其他部分的任何尝试都会很好。
  • 仅供参考,这种方法被称为“并行数组”,并且在 1970 年代随着具有实际数据结构的语言的出现(即几乎所有在达特茅斯 BASIC 之后的语言)的出现而过时。我希望讲师在此之后立即介绍课程并“正确”重写相同的程序。

标签: java arrays


【解决方案1】:

你不知怎么知道最低薪水是smallestSalary

// Find the index corresponding to the smallest salary
int index = -1;
for(int i=0; i<salaryArray.length; i++){
    if(salaryArray[i] == smallestSalary){
        index = i;
    }
}

现在你有了索引。所以只需返回/使用名称、年龄。

System.out.println(nameArray[index]);
System.out.println(ageArray[index]);

但是拥有类似的数据会导致数据不一致。你可以有一个类来分组每个人的相关信息。 Person 类可以这么简单。

class Person{
   int age;
   String name;
   int salary;
}

【讨论】:

    【解决方案2】:

    您可以返回工资数组的索引,并使用相同的索引从另一个数组中获取姓名和年龄。

    public static int getSmallestSalaryIndex(double[] salaries) {
    
    double smallSal = salaries[0];    
    int index =0;
    for(int i = 1; i < salaries.length; i++) {
    
        if(smallSal > salaries[i]) {
            smallSal = salaries[i];
            index =i;
        }       
    }
       return index;
    }
    

    您应该根据方法名称编写实现,不要将所有内容都包含在同一个方法中。您不需要将所有数组(年龄、姓名)传递给getSmallestSalaryIndex

    int idx = getSmallestSalaryIndex(salaries);
    System.out.printf("The person name %s is %d has salary %f", names[idx] ,ages[idx],salaries[idx]);
    

    【讨论】:

    • @HuyVo 告诉我怎么做?
    • @HuyVo 实际上,这不会发生,但是是的。我会考虑这种情况。并更改了代码。
    • @HuyVo 不,你有非常基本的错误,不要让我指出。 :P 是的 index = 0 可以避免。
    • 这很有帮助。谢谢你。是的,我知道,最好编写辅助方法,我会在接近尾声时对其进行格式化。
    【解决方案3】:
    double smallSal = salaries[0];
    int index = 0;
    
    for(int i = 1; i < salaries.length; i++) {
    
        if(smallSal > salaries[i]) {
            smallSal = salaries[i];
            index = i;
        }       
    }
    

    因为您假设最小值是第一个索引,因此可以减少一次行程。

    然后,使用索引来访问该人的姓名和年龄。

    不要忘记检查一些琐碎的事情,例如数组是否为空等。

    【讨论】:

    • 如果设置 int i = 1,由于索引值从零开始,这不会弄乱实际索引吗?
    • 没有。你猜数组中的第一个元素是最小的。由于这是假设,您可以在i=0 时跳过。
    • 当列表为{3,2,1{1,2,3}时,尝试在一张纸上运行算法
    • int index = smallSal[0]; 永远不会编译
    • @Ravi 你是什么意思?
    【解决方案4】:

    假设你有数组 a[], b[], c[] - a 是薪水

    1. 当您检查最低索引时,您不会更改数组 a[] 的顺序。

    取最低的索引为“pos”

    只需访问 b[pos], c[pos]

    1. 在找出最低索引的同时更改数组 a[] 中值的顺序

    改变b[]、c[]的值,同时改变a[]的值并访问b[pos]、c[pos]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-03
      • 2018-07-28
      • 2023-01-19
      • 2016-09-24
      • 1970-01-01
      • 2014-07-13
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多