我如何让这个 for 循环工作?
How do i get this for loop to work?
我制作了一个辅助方法来对其中包含数字的数组进行排序。
然后我在我的 "main" 方法中调用该方法并使用 string.format 让它 return 。
当 string.format 部分在 for 循环和 if 语句之外但当它在 i 内部时 return 当我告诉它任何东西时,此代码有效。
我知道这个问题可能与我的 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]、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;
}
排序后,您将在第一个元素(索引 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;
}
解决方案要求您找到 "address" 而不是 "content"。
我在这里假设 salaries
包含所有员工的工资,names
是他们的名字,ages
是他们的年龄。我还假设 ages
、names
和 salaries
具有相同的大小和每个索引的相关性。然后根据这些信息,你构造一个字符串来表示公司工资最低的员工。
由于这些信息中的 none 是在单个对象中构建的,因此您只需要找到最低工资 INDEX。有了这些信息,您可以通过访问 ages[INDEX]
和 names[INDEX]
来提供 his/her 姓名和年龄。
你现在做的是找到最低薪水,然后在循环中猜测它的INDEX,这样会比较复杂。相反,在您的方法 "smallestSal" 中,获取最低薪水数组中的 INDEX。然后,您的循环变得简单。请看下面我的意思。
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;
}
我制作了一个辅助方法来对其中包含数字的数组进行排序。
然后我在我的 "main" 方法中调用该方法并使用 string.format 让它 return 。
当 string.format 部分在 for 循环和 if 语句之外但当它在 i 内部时 return 当我告诉它任何东西时,此代码有效。
我知道这个问题可能与我的 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]、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;
}
排序后,您将在第一个元素(索引 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;
}
解决方案要求您找到 "address" 而不是 "content"。
我在这里假设 salaries
包含所有员工的工资,names
是他们的名字,ages
是他们的年龄。我还假设 ages
、names
和 salaries
具有相同的大小和每个索引的相关性。然后根据这些信息,你构造一个字符串来表示公司工资最低的员工。
由于这些信息中的 none 是在单个对象中构建的,因此您只需要找到最低工资 INDEX。有了这些信息,您可以通过访问 ages[INDEX]
和 names[INDEX]
来提供 his/her 姓名和年龄。
你现在做的是找到最低薪水,然后在循环中猜测它的INDEX,这样会比较复杂。相反,在您的方法 "smallestSal" 中,获取最低薪水数组中的 INDEX。然后,您的循环变得简单。请看下面我的意思。
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;
}