【问题标题】:How do i get this for loop to work?我如何让这个 for 循环工作?
【发布时间】:2018-08-19 17:48:19
【问题描述】:

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

然后我在我的“main”方法中调用该方法并让它返回一个使用 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;
}

【问题讨论】:

  • 请贴出整个代码!此外,它可能不会返回任何内容,因为数组不包含薪水,其中薪水 = 0
  • 我已经为你添加了整个代码

标签: java arrays for-loop if-statement string.format


【解决方案1】:

解决方案要求您找到“地址”而不是“内容”。

我在这里假设salaries 包含所有员工的工资,names 是他们的名字,ages 是他们的年龄。我还假设agesnamessalaries 具有相同的大小并且与每个索引相关。然后利用这些信息,构造一个字符串来表示公司中薪水最低的员工。

由于这些信息都不是在单个对象中结构化的,因此您只需找到最低薪水INDEX。有了这些信息,您可以通过访问ages[INDEX]names[INDEX] 提供他/她的姓名和年龄。

你目前正在做的是找到最低工资,然后在循环中猜测它的 INDEX,这会更复杂。相反,在您的方法“smallestSal”中,获取最低薪水数组中的索引。然后,您的循环变得简单。请看下面我的意思。

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;
}

【讨论】:

  • 你的所有假设都是绝对正确的!!如果我需要更多帮助,我会尝试你的建议并询问增益!谢谢!!!
  • 这是我的荣幸 :)
【解决方案2】:

排序后,您将在第一个元素(索引 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;
}

【讨论】:

  • 我已经做了类似的事情,但它只有在每个给定数组中只有一个东西的情况下才有效。如果每个数组中有多个东西,它就不起作用了。
  • 猜你只需要得到最小的薪水细节。请参考编辑后的答案。
  • Arrays.sort 将对原始数组进行排序,然后我们无法找到原始索引以从其他数组中获取数据。所以最好使用另一种数据结构来获取排序值。
【解决方案3】:

由于您正在遍历您的数组,您应该将 sal[0], names[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;
    }

【讨论】:

  • 我现在已经全部发布了
猜你喜欢
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多