我的目标是编写一个循环,将newScores设置为左移一次的oldScores,将元素0复制到结尾。
修改:这是我的主要问题,我初始化了newScores[3] = oldScores[0];
,但是当没有oldScores时,问题就是for循环使得i = 4
[ 4]或newScores [4]但是因为我将newScores [3]初始化为oldScores [0],它编译并运行,但问题是[4]根本不在数组中。我该如何摆脱这个问题?我离这么近,但距离我很烦。
示例:
If oldScores = {10, 20, 30, 40}, then newScores = {20, 30, 40, 10}
有趣的是我有正确的输出,但我使用它的学习网站告诉我,我有正确的输出,但它也显示这个"运行时错误(通常由于无效的数组/向量访问,除以0等)。测试中止了。"。
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;
newScores[3] = oldScores[0];
for(i=0; i<SCORES_SIZE-1; i++){
newScores[i] = oldScores[i +1];
}
for (i = 0; i < SCORES_SIZE; ++i) {
System.out.print(newScores[i] + " ");
}
System.out.println();
return;
}
}
答案 0 :(得分:1)
问题出现在第二个循环中,你有++ i。 i ++和++我有两个不同的含义。这是一个描述你意义的链接。 What is the difference between ++i and i++?。如果你改变它,你不应该再得到错误。以下是您的代码中的更改。
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;
newScores[3] = oldScores[0];
for(i=0; i<SCORES_SIZE-1; i++){
newScores[i] = oldScores[i +1];
}
for (i = 0; i < SCORES_SIZE; i++) {
System.out.print(newScores[i] + " ");
}
System.out.println();
return;
}
}
答案 1 :(得分:0)
在你的第二个for循环中,你在使用它之前递增i,即++ i
这意味着,我将在循环中的System.out之前递增。由于您将i初始化为0,因此它将打印的第一个索引是1(不是0)。它会尝试打印
newScores[1]
newScores[2]
newScores[3]
newScores[4]
最后一个会导致异常(索引无效)。将for循环更改为
for (i = 0; i < SCORES_SIZE; i++) {
(其中i在使用后递增)
答案 2 :(得分:0)
我注意到你以错误的方式使用i ++和++ i
第一个循环:newScores数组索引从0到2,每次增加1
第二个循环:您正在尝试打印newScores但是使用++ i进行循环。这意味着newScores索引将从1打印到3。
=&GT;索引3处的错误。
解决方案:用替换第二个循环
for (i = 0; i < SCORES_SIZE - 1; i++)
答案 3 :(得分:0)
只需进行简单的更改即可使代码正常工作
oldScores[0] = 10;
oldScores[1] = 20;
oldScores[2] = 30;
oldScores[3] = 40;
newScores[3] = oldScores[0];
for(i=0; i<SCORES_SIZE-1; i++){
newScores[i] = oldScores[i +1];
}
/* REMOVE THIS PART
for (i = 0; i < SCORES_SIZE; ++i) {
System.out.print(newScores[i] + " ");
}
*/TILL HERE
// USE THE FOLLOWING
for (i = 0; i < SCORES_SIZE; i++) {
System.out.print(newScores[i] + " ");
}
System.out.println();
因为您在使用之前增加了导致错误的值。
答案 4 :(得分:0)
为了克服&#34;运行时错误(通常由于无效的数组/向量访问,除以0等)。测试中止了。&#34;我使用了if / else语句:
for (i = 0; i < SCORES_SIZE; i++)
{
if (i == (SCORES_SIZE - 1))
{
newScores[i] = oldScores[0];
}
else
{
newScores[i] = oldScores[i + 1];
}
}
答案 5 :(得分:0)
这是将通过所有测试的答案:
log4j.appender.loggerId.MaxFileSize=2MB
答案 6 :(得分:0)
为什么要重新发明轮子? Java API已经允许执行此类操作
1-创建方法
public static int[] switchScores(int[] oldScores){
if(oldScores != null && oldScores.length > 0) {
final int SIZE = oldScores.length;
int[] newScores = new int[SIZE];
newScores = Arrays.copyOfRange(oldScores, 1, SIZE+1);
newScores[SIZE-1] = oldScores[0];
return newScores;
}
else{
throw new IllegalArgumentException("Null or Empty Array provided");
}
}
2-运行测试
public static void main(String[] args) {
int[] input = new int[]{10, 20, 30, 40};
System.out.println("Old scores : " + Arrays.toString(input));
int[] output = switchScores(input);
System.out.println("New scores : " + Arrays.toString(output));
}
答案 7 :(得分:0)
This is it:
for (i = 0; i < newScores.length; ++i) {
// if statement to shift numbers to the left starting with the 2nd value
if (i > 0) {
newScores[i + 1] = oldScores[i];
}
// This will make the 1st value move and become newScores last value regardless of SCORES_SIZE value
else {
newScores[newScores.length - 1] = oldScores[i];
}
}