Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环未正确修改数组元素_Java_Arrays - Fatal编程技术网

Java 循环未正确修改数组元素

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

导致问题的循环是第二个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 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] + " ");
}