Java 我如何让这个循环工作?

Java 我如何让这个循环工作?,java,arrays,for-loop,if-statement,string.format,Java,Arrays,For Loop,If Statement,String.format,我创建了一个helper方法来对包含数字的数组进行排序 然后在main方法中调用该方法,并让它返回using string.format 当string.format部分在for循环和if语句之外,但在我告诉它时,它在i中不返回任何内容时,此代码就可以工作 我知道这个问题可能与我的if语句有关,但我很难找到解决方案 public static String getSmallestSalaryString(String[] names, int[] ages, double[] salaries)

我创建了一个helper方法来对包含数字的数组进行排序

然后在main方法中调用该方法,并让它返回using string.format

当string.format部分在for循环和if语句之外,但在我告诉它时,它在i中不返回任何内容时,此代码就可以工作

我知道这个问题可能与我的if语句有关,但我很难找到解决方案

public static String getSmallestSalaryString(String[] names, int[] ages, double[] salaries) {
    String str= "";
    String str2="";
    String str3="";
    double[] sal= smallestSal(salaries);

    for(int i= 0; i < sal.length; i++) {
        if(sal[i]== 0) {
             str= String.format("Smallest salary:$%,.2f, Name:%s, age:%d" , sal[0], names[0], ages[0]);
             return str;
        }

        else if(sal[i]== 1) {
             str2= String.format("Smallest salary:$%,.2f, Name:%s, age:%d" , sal[1], names[1], ages[1]);
            return str2;
        }

        else if(sal[i] == 2) {
             str3= String.format("Smallest salary:$%,.2f, Name:%s, age:%d" , sal[2], names[2], ages[2]);
            return str3;
        }
    }


    return str;
}

public static double[] smallestSal(double[] salaries) {
    Arrays.sort(salaries);

    return salaries;
}

由于您正在迭代数组,因此应该将sal[0]、name[0]、ages[0]更改为sal[i]、names[i]、ages[i]

for(int i= 0; i < sal.length; i++) {
    if(sal[i]== 0) {
         str= String.format("Smallest salary:$%,.2f, Name:%s, age:%d" , sal[i], names[i], ages[i]);
         return str;
    }

排序后,您将获得第1个元素索引0中的最低工资。然后,您应该在原始数组中找到该值的实际索引,并从该索引中获取详细信息。因此,您的代码应该修改如下

public static String getSmallestSalaryString(String[] names, int[] ages, double[] salaries) {
    String str = "";
    String str2 = "";
    String str3 = "";
    ArrayList sal = smallestSal(salaries);

    double smallestSalary = (double) sal.get(0);
    int salIndex = 0;

    for (int i = 0; i < salaries.length; i++) {
        if (salaries[i] == smallestSalary) {
            salIndex = i;
            break;
        }
    }
    str = String.format("Smallest salary:$%,.2f, Name:%s, age:%d", salaries[salIndex], names[salIndex], ages[salIndex]);

    return str;
}

public static ArrayList smallestSal(double[] salaries) {
    ArrayList salaryList = new ArrayList();
    for (int i = 0; i < salaries.length; i++) {
        salaryList.add(salaries[i]);
    }
    Collections.sort(salaryList);

    return salaryList;
}

解决方案要求您查找地址,而不是内容

我在这里假设工资包含所有员工的工资,姓名是他们的姓名,年龄是他们的年龄。我还假设年龄、姓名和薪水都有相同的大小,并且每个指数都有相关性。然后,使用这些信息,构造一个字符串来指示公司中工资最低的员工

由于这些信息都不是在单个对象中结构化的,因此您只需要找到最低工资指数。有了这些信息,您可以通过访问ages[索引]和names[索引]给出他/她的姓名和年龄

你目前正在做的是找到最低工资,然后在循环中猜测它的指数,这将更加复杂。相反,在您的方法smallestal中,获取最小工资数组中的索引。这样,循环就变得简单了。看看下面我的意思

public static String getSmallestSalaryString(String[] names, int[] ages, double[] salaries) {
    int lowestSalaryIdx= getLowestSalaryIndex(salaries);

    return String.format("Smallest salary:$%,.2f, Name:%s, age:%d" , salaries[lowestSalaryIdx], names[lowestSalaryIdx], ages[lowestSalaryIdx]);
}

public static int getLowestSalaryIndex(double[] salaries) {
    int lowestSalaryIndex = 0;
    double lowestSalary = Double.MAX_VALUE;
    for(int i=0; i<salaries.length; ++i) {
      if (salaries[i] < lowestSalary) {
        lowestSalaryIndex = i;
        lowestSalary = salaries[i];
      }
    }

    return lowestSalaryIndex;
}

请张贴完整的代码!此外,它可能不会返回任何内容,因为数组中不包含salary,其中salary=0我已经为您添加了全部代码我已经发布了所有内容现在我已经做了类似的事情,但它只在每个给定数组中只有一个内容时才有效。如果每个数组中有多个元素,那么它就不起作用了。我猜你只需要获得最小的薪资细节。请参考编辑的答案。Arrays.sort将对原始数组进行排序,之后我们将无法找到原始索引以从其他数组获取数据。因此,最好使用另一个数据结构来获得排序值。您的所有假设都是绝对正确的!!如果我需要更多的帮助,我会尝试你的建议并询问gain!非常感谢。这是我的荣幸: