【问题标题】:Trying to return an array with stored elements (java)试图返回一个包含存储元素的数组(java)
【发布时间】:2014-06-06 11:07:57
【问题描述】:

我正在尝试将一组数字存储到一个带有 for 循环条件后跟 if 条件的数组中,并且此方法应返回包含符合条件语句的存储元素的数组。我已经被这个问题困扰了一段时间,但我什么都没有想到。

public int [] method ( int a) {
    int [] newarray=new int[count];

    for (int i=1; i<=a; i++)  {
        If (a%i==0) {
            for (int m=0; m<count;m++) {        
               newarray[m]=a/i;
               break;
            }
        }
    }
    return newarray;
}

【问题讨论】:

  • 请格式化您的代码并解决编译器错误。
  • for (int m=0; m 是什么意思?
  • 最快的方法是添加到 List ,循环后转换为数组。
  • 公开 -> 公开。新数组-> 新数组 [m] ? int[count]之后的分号...
  • 即使您将 newarray 分配的索引添加为newarray[m]=a/i,您的数组也会被覆盖。这里的具体要求是什么?

标签: java arrays storage


【解决方案1】:
public int [] method (int a) {
    int [] newarray = new int[count];

    for (int i = 1; i <= a; i++)  {
        if (a % i == 0) {
            for (int m = 0; m < count; m++) {        
                if (newarray[m] == 0) {
                   newarray[m] = a/i;
                   break;
                }
            }

            break;//Depending on your wanted solution
        }
    }

    return newarray;
}

我假设每当数组索引包含 0 时,它都未初始化,并被认为是空的。

在您的原始代码中,第二个 for 循环每次都会覆盖数组中的第一个索引。我添加的 if 语句确保它只在可用槽中添加一个数字。

我还添加了第二个休息时间;由于您有两个 for 循环,因此您需要两次中断才能完全退出循环。从你的问题中我不明白这是否是你想要的。因此,您必须决定是否保留它。

编辑:

count == 10 时,假设你的数组newarray

0   0    0    0    0    0    0    0    0    0

这就是在你的第二个 for 循环中发生的情况:

for (int m = 0; m < count; m++) {        
    newarray[m] = a/i;
    break;
}

循环中的第一次是m == 0,所以执行的行是

newarray[0] = a/i;
break;

然后,由于break;,程序将退出循环。 a/i 的值各不相同,但在此示例中,假设 a/i 为 8。因此,newarray 现在看起来像这样:

8   0    0    0    0    0    0    0    0    0

下次你的程序进入第二个 for 循环时,同样的事情会发生。如果当时a/i 是3,那么我们会得到

newarray[0] = 3;
break;

你的数组现在看起来像这样

3   0    0    0    0    0    0    0    0   0

如您所见,每次您的代码运行时,第一个索引都会被覆盖。我输入的 if 语句确保它不会覆盖,除非数组槽等于 0(因为这意味着它是空的)。

使用额外的 if 语句

for (int m = 0; m < count; m++) {        
    if (newarray[m] == 0) {
        newarray[m] = a/i;
        break;
    }
}            

第一次围绕m == 0

newarray[0] 不等于 0。(从上次:newarray[0] 为 3)

因此代码继续m == 1

newarray[1] 等于 0 然后

newarray[1] = a/i;
break;

被执行。

希望这是有道理的。请注意,这样做有一个缺点。如果a/i ever 为 0,那么它只会在下次循环运行时被覆盖。

【讨论】:

  • 成功了,你能解释一下额外 if 语句背后的逻辑吗?
【解决方案2】:

根据您的代码,我认为您需要包含 count 重复变量除数元素的数组。例如,如果 count 是 5 而 a 是 10,你需要一个像 [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10] 这样的数组

如果是这种情况,请尝试

public int[] method(int a) {
    List<Integer> list = new ArrayList<Integer>();

    for (int i=1; i<=a; i++)  {
        if(a%i==0) {
            int value = a/i;
            for (int m=0; m<count; m++) {        
                list.add(value);
            }
        }
    }
    int[] newArray = new int[list.size()];
    int index = 0;
    for(Integer i : list){
        newArray[index++] = i;
    }
    Arrays.sort(newArray);
    return newArray;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2020-10-27
    • 2014-05-02
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多