0

所以..在我的程序中,我构建了一个方法,该方法从数组中获取两个值并将它们相乘,然后必须将值保存到数组中。然后我再次执行此操作,而不是在下一个中保存第二个值数组位置它似乎将它保存在每个位置。我认为我的方法中的循环确实是错误的。我希望将每个计算值保存在数组中(至少这就是重点)并最终将它们打印出来? 现在程序打印出这个:

4200 4200 4200 4200 4200 4200

任何帮助将不胜感激。我是 Java 新手。

public class TestingN
{
    public static void main(String[] args) 
    {
            int [] initialMarks = new int [4];
            int [] result = new int [2];
            initialMarks[0] = 40;
            initialMarks[1] = 60;
            initialMarks[2] = 60;
            initialMarks[3] = 70;
            result = computedMarks(initialMarks[0], initialMarks[1]);
            result = computedMarks(initialMarks[2], initialMarks[3]);
            for(int i=0; i< result.length; i++)
                  System.out.println(result[i]);
    }
            public static int [] computedMarks(int mark1, int mark2) 
          { 
                int [] i= new int [6];
                for (int j = 0; j < i.length; j++)
                {                   
                    if ((mark1 < 35 && mark2 > 35) || (mark1 > 35 && mark2 < 35))
                    {
                        i[j] = 35;
                    }
                    else
                    {
                        i[j] = (mark1 * mark2);
                    }
                }
              return i;
          }
}
4

4 回答 4

1

试试这个,这应该可以。您不需要在方法 computedMarks 上有一个数组

 public static void main(String[] args) 
        {
                int [] initialMarks = new int [4];
                int [] result = new int [2];
                initialMarks[0] = 40;
                initialMarks[1] = 60;
                initialMarks[2] = 60;
                initialMarks[3] = 70;
                result[0] = computedMarks(initialMarks[0], initialMarks[1]);
                result[1] = computedMarks(initialMarks[2], initialMarks[3]);
                for(int i=0; i< result.length; i++){
                    System.out.println(result[i]);
                }

  } public static int computedMarks(int mark1, int mark2) 
  { 
      int i = 0;
      {                   
          if ((mark1 < 35 && mark2 > 35) || (mark1 > 35 && mark2 < 35))
          {
              i = 35;
          }
          else
          {
              i = (mark1 * mark2);
          }
      }
    return i;
}
于 2013-10-30T12:15:09.057 回答
0
if ((mark1 < 35 && mark2 > 35) || (mark1 > 35 && mark2 < 35))

This will always be false with the value set

        initialMarks[0] = 40;
        initialMarks[1] = 60;
        initialMarks[2] = 60;
        initialMarks[3] = 70;

So the else clause will be the only executed line.

于 2013-10-30T12:15:36.150 回答
0

修改代码(result = computedMarks(initialMarks[0], initialMarks[1]);)如下

 result[0] = computedMarks(initialMarks[0], initialMarks[1])[0];
 result[1] = computedMarks(initialMarks[2], initialMarks[3])[0];
于 2013-10-30T12:14:55.587 回答
0

首先,您result通过使用覆盖您的变量

        result = computedMarks(initialMarks[0], initialMarks[1]);
        result = computedMarks(initialMarks[2], initialMarks[3]);

这样,您的第一个computedMarks呼叫将被第二个呼叫删除。如果您想查看这两个结果,可以使用以下代码:

        result = computedMarks(initialMarks[0], initialMarks[1]);
        for(int i=0; i< result.length; i++)
        System.out.println(result[i]);

        result = computedMarks(initialMarks[2], initialMarks[3]);
        for(int i=0; i< result.length; i++)
        System.out.println(result[i]);

其次,您在 main 的开头创建了一个 2 个单元格数组,但computedMarks其中有一个new int [6]语句。程序的输出是 6 单元数组,其值为6070乘以这句话 6 倍:

} else {
    i[j] = (mark1 * mark2);
}

它总是进入else部分,因为参数是60and 70,它永远不会填充if ((mark1 < 35 && mark2 > 35) || (mark1 > 35 && mark2 < 35))

所以最后你得到60 * 70了 6 单元阵列的每个单元。

于 2013-10-30T12:22:23.973 回答