2016-03-15 70 views
0

这里原来提示:复制和修改阵列元件

写循环,其设定newScores到oldScores移位一旦离开,与复制到端部元件0。例如:如果oldScores = {10,20,30,40},那么newScores = {20,30,40,10}。

注意:这些活动可能会测试具有不同测试值的代码。该活动将执行两个测试,第一个测试是4元素数组(newScores = {10,20,30,40)),第二个测试是1元素数组(newScores = {199})。请参阅如何使用zyBooks。

另请注意:如果提交的代码尝试访问无效的数组元素,如4元素数组的newScores [9],则测试可能会产生奇怪的结果。或者测试可能会崩溃并报告“Program end never reached”,在这种情况下,系统不会打印导致报告消息的测试用例。

这是我的代码:

public class StudentScores { 
    public static void main (String [] args) { 
    final int SCORES_SIZE = 4; 
    int[] oldScores = new int[SCORES_SIZE]; 
    int[] newScores = new int[SCORES_SIZE]; 
    int i = 0; 

    oldScores[0] = 10; 
    oldScores[1] = 20; 
    oldScores[2] = 30; 
    oldScores[3] = 40; 

    for (i = 0; i < SCORES_SIZE - 1; i++) { 
    newScores[3] = oldScores[0]; 
    newScores[i] = oldScores[i + 1]; 
    } 

    for (i = 0; i < SCORES_SIZE; ++i) { 
    System.out.print(newScores[i] + " "); 
    } 
    System.out.println(); 

    return; 
} 
} 

这是我的输出:

测试对于oldScores = {10,20,30,40}

你的输出: 20 30 40 10

✖oldScores测试= {199}

预期输出:199

你的输出:0

为什么我会得到0为我的第二输出测试?

+0

您是硬编码'3',而不是'SCORES_SIZE - 1'。 –

+0

更改newscores [3]为newscores [SCORES_SIZE - 1]仍然给我0为第二个输出测试 – java2019

+0

啊,这是因为'SCORES_SIZE - 1 == 0'和'0 < 0'立即失效。将'newScores [SCORES_SIZE - 1] = oldScores [0];'移到for循环之外。 –

回答

3

for循环在其中从oldscores的值复制到newscores永远不会在SCORES_SIZE == 1的情况下运行,因为SCORES_SIZE - 1 == 00 < 0立即是错误的。

移动newScores[SCORES_SIZE - 1] = oldScores[0];线外的for循环:

for (i = 0; i < SCORES_SIZE - 1; i++) { 
    newScores[i] = oldScores[i + 1]; 
} 
newScores[SCORES_SIZE - 1] = oldScores[0]; 
0

假设你唯一的其他检查是长度为1的阵列,只需使用此

if(oldscores.length==1) 
{newscores[0]=oldscores[0]; 
System.out.println(newscores[0]); 
} 

或甚至更简单,

if(oldscores.length==1) 
{ 
    System.out.println(oldscores[0]); 
}