在Java中如何用特定字符串替换数组中的所有倍数

在Java中如何用特定字符串替换数组中的所有倍数,java,arrays,Java,Arrays,我有一个这样的整数数组 for (int i = 0; i <= n; i++) { if ((i % 3 == 0) || (i % 5 != 0)) { arr[i] = 'AB'; } else if ((i % 3 != 0) || (i % 5 == 0)) { arr[i] = 'CD'; } else if ((i % 3 == 0) || (i %

我有一个这样的整数数组

for (int i = 0; i <= n; i++) {
        if ((i % 3 == 0) || (i % 5 != 0)) {
            arr[i] = 'AB';
        }
        else if ((i % 3 != 0) || (i % 5 == 0)) {
            arr[i] = 'CD';
        }
        else if ((i % 3 == 0) || (i % 5 == 0)) {
            arr[i] = 'ABCD';
        }
    }
int[]arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

现在我想将3的每一个倍数(但不是5的倍数)更改为'AB',将5的每一个倍数(但不是3的倍数)更改为'CD',将3和5的每一个倍数更改为'ABCD'

我想要一个动态的解决方案,它可以用于任何数量的数组元素-解决方案应该站在不考虑大小

我试着这样做

for (int i = 0; i <= n; i++) {
        if ((i % 3 == 0) || (i % 5 != 0)) {
            arr[i] = 'AB';
        }
        else if ((i % 3 != 0) || (i % 5 == 0)) {
            arr[i] = 'CD';
        }
        else if ((i % 3 == 0) || (i % 5 == 0)) {
            arr[i] = 'ABCD';
        }
    }

for(inti=0;i这看起来是的一个修改版本。有几个错误,我可以马上发现

if ((i % 3 == 0) || (i % 5 != 0)) {
在上面的代码片段中,您正在检查
i
(for循环的迭代器)是
3
5
的倍数。但是,您需要检查位于
i
位置的数组元素是否是
3
5
的倍数。为此,您可以将上述代码段更改为以下内容:

if ((arr[i] % 3 == 0) || (arr[i] % 5 != 0)) {

接下来,您的条件似乎不正确。您要检查位置
i
处的元素是否是
3的倍数,并且位置
i
处的元素是否不是
5的倍数。为此,应使用
&
而不是
|
,如下所示:

if ((arr[i] % 3 == 0) && (arr[i] % 5 != 0)) {

最后,您试图将多个字符存储到单个
char
值中,这在Java中是不可能的。如果需要使用多个字符,则应使用
String
。但是,您将无法在
int[]中存储
String
,因此您需要创建一个
字符串[]

String[] newArray = new String[arr.length];

for (int i = 0; i <= n; i++) {
    if ((arr[i] % 3 == 0) && (arr[i] % 5 != 0)) {
        newArray[i] = "AB";
    } else if ((arr[i] % 3 != 0) && (arr[i] % 5 == 0)) {
        newArray[i] = "CD";
    } else if ((arr[i] % 3 == 0) && (arr[i] % 5 == 0)) {
        newArray[i] = "ABCD";
    } else {
        newArray[i] = Integer.toString(arr[i]);
    }
}
产生预期输出的:

[1, 2, AB, 4, CD, AB, 7, 8, AB, CD, 11, AB, 13, 14, ABCD, 16, 17, AB, 19, CD]

这看起来是一个修改版本的。有几个错误,我可以当场发现

if ((i % 3 == 0) || (i % 5 != 0)) {
在上面的代码片段中,您正在检查
i
(for循环的迭代器)是
3
5
的倍数。但是,您需要检查位于
i
位置的数组元素是否是
3
5
的倍数。为此,您可以将上述代码段更改为以下内容:

if ((arr[i] % 3 == 0) || (arr[i] % 5 != 0)) {

接下来,您的条件似乎不正确。您要检查位置
i
处的元素是否是
3的倍数,并且位置
i
处的元素是否不是
5的倍数。为此,应使用
&
而不是
|
,如下所示:

if ((arr[i] % 3 == 0) && (arr[i] % 5 != 0)) {

最后,您试图将多个字符存储到单个
char
值中,这在Java中是不可能的。如果需要使用多个字符,则应使用
String
。但是,您将无法在
int[]中存储
String
,因此您需要创建一个
字符串[]

String[] newArray = new String[arr.length];

for (int i = 0; i <= n; i++) {
    if ((arr[i] % 3 == 0) && (arr[i] % 5 != 0)) {
        newArray[i] = "AB";
    } else if ((arr[i] % 3 != 0) && (arr[i] % 5 == 0)) {
        newArray[i] = "CD";
    } else if ((arr[i] % 3 == 0) && (arr[i] % 5 == 0)) {
        newArray[i] = "ABCD";
    } else {
        newArray[i] = Integer.toString(arr[i]);
    }
}
产生预期输出的:

[1, 2, AB, 4, CD, AB, 7, 8, AB, CD, 11, AB, 13, 14, ABCD, 16, 17, AB, 19, CD]

int[]
可以保存
int
值。A
char
是一种整数类型。问题是
'AB'
是两个字符,因此不是有效字符。您考虑过
'C'
吗?@Elliott Frisch我想将3的每一个倍数(但不是5的倍数)更改为'AB',5的每一个倍数((但不是3的倍数)to'CD'&3和5到'ABCDAn
int[]
的每一个倍数都可以容纳
int
值。
char
是一个整数类型。问题是
'AB'
是两个字符,因此不是有效字符。您考虑过
'C'
吗?@Elliott Frisch我想更改3的每一个倍数(但不是5的倍数)到'AB',每5的倍数((但不是3的倍数)到'CD',每3和5的倍数到'ABCDHi',我把这个问题改了一点。你现在可以检查一下吗?@tommy123我编辑了我的答案,以适应对你的问题所做的修改。System.out.println(Arrays.toString(newArray));当打印这行时,我在线程“main”java.lang.ArrayIndexOutOfBoundsException:20在第六个问题中遇到异常。替换(第六个问题。java:40)在第六个问题中。在第六个问题中的sumofMultiple(第六个问题。java:34)在第六个问题。main(第六个问题。java:57)该异常不是由于打印数组造成的。我建议您阅读:好的,我最初使用了arr.length。我必须使用arr.length-1Hi我对问题做了一些更改。您现在可以检查吗?@tommy123我编辑了我的答案,以适应对您的问题.System.out.println(Arrays.toString(newArray))所做的修改;当打印这行时,我在线程“main”java.lang.ArrayIndexOutOfBoundsException:20在第六个问题中遇到异常。替换(第六个问题。java:40)在第六个问题中。在第六个问题中的sumofMultiple(第六个问题。java:34)在第六个问题。main(第六个问题。java:57)该异常不是由于打印数组造成的。我建议您阅读:好的,我得到了它,我最初采用了arr.length。我必须采用arr.length-1