Java 循环未正确修改数组元素
导致问题的循环是第二个for循环Java 循环未正确修改数组元素,java,arrays,Java,Arrays,导致问题的循环是第二个for循环 import java.util.Scanner; public class StudentScores { public static void main (String [] args) { Scanner scnr = new Scanner(System.in); final int NUM_POINTS = 4; int[] dataPoints = new int[NUM_POINTS]; int
import java.util.Scanner;
public class StudentScores {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
final int NUM_POINTS = 4;
int[] dataPoints = new int[NUM_POINTS];
int controlValue;
int i;
controlValue = scnr.nextInt();
for (i = 0; i < dataPoints.length; ++i) {
dataPoints[i] = scnr.nextInt();
}
for (i = 0; dataPoints[i] < controlValue; ++i) {
dataPoints[i] = dataPoints[i] * 2;
}
for (i = 0; i < dataPoints.length; ++i) {
System.out.print(dataPoints[i] + " ");
}
System.out.println();
}
}
预期产量
4 12 18 20
输入列表中的第一个数字是它应该乘以2的最大数字。因为20大于10,所以它不会相乘。然而,9应该乘以18,但事实并非如此。如果有人能对我在形成这个循环时可能犯下的错误给出一些见解,我将不胜感激。谢谢大家! 由于输入数据的条件和顺序,第二个for循环正在退出,当达到控制值时将停止。例如,如果您的输入为
10 1 2 3 4
,您将得到预期的结果(即2 4 6 8
),但当达到条件dataPoints[i]
时(在您的情况下为12
),For循环将退出
相反,您应该像在第三个循环中一样循环整个数据点
数组,并在值加倍之前检查controlValue
import java.util.Scanner;
public class StudentScores {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
final int NUM_POINTS = 4;
int[] dataPoints = new int[NUM_POINTS];
int controlValue;
int i;
controlValue = scnr.nextInt();
for (i = 0; i < dataPoints.length; ++i) {
dataPoints[i] = scnr.nextInt();
}
for (i = 0; i < dataPoints.length; ++i) {
if (dataPoints[i] < controlValue) {
dataPoints[i] = dataPoints[i] * 2;
}
}
// This could be combined into the loop above...
for (i = 0; i < dataPoints.length; ++i) {
System.out.print(dataPoints[i] + " ");
}
System.out.println();
}
}
import java.util.Scanner;
公开课学生成绩{
公共静态void main(字符串[]args){
扫描仪scnr=新扫描仪(System.in);
最终整数点=4;
int[]数据点=新的int[NUM_点];
int控制值;
int i;
controlValue=scnr.nextInt();
对于(i=0;i
如果愿意,也可以在单个循环中完成所有这些操作,例如:
for (i = 0; i < dataPoints.length; ++i) {
dataPoints[i] = scnr.nextInt();
if (dataPoints[i] < controlValue) {
dataPoints[i] = dataPoints[i] * 2;
}
System.out.print(dataPoints[i] + " ");
}
for(i=0;i
由于您的情况,您的第二个for循环正在退出,您应该完全迭代数据点,并在乘法之前在循环中进行检查。Andrew,如果您正在学习编程(您似乎正在使用一个在线编程挑战网站),最好的学习方法是如何使用调试器单步执行未按您希望/预期执行的代码。使用调试器,您将看到代码的作用,而不是您认为它的作用(在本例中,当它看到不小于10的12
时退出循环)。
for (i = 0; i < dataPoints.length; ++i) {
dataPoints[i] = scnr.nextInt();
if (dataPoints[i] < controlValue) {
dataPoints[i] = dataPoints[i] * 2;
}
System.out.print(dataPoints[i] + " ");
}