Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的数组不是';如果没有按我希望的方式填充,我将如何修复它?_Java - Fatal编程技术网

Java 我的数组不是';如果没有按我希望的方式填充,我将如何修复它?

Java 我的数组不是';如果没有按我希望的方式填充,我将如何修复它?,java,Java,抱歉,我知道这是一个相当简单的问题,但我对编码还不熟悉 这是我正在使用的代码 import java.util.*; public class CharacterConverter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] intArrayCapital, intArrayLower; intArrayCa

抱歉,我知道这是一个相当简单的问题,但我对编码还不熟悉

这是我正在使用的代码

import java.util.*;

public class CharacterConverter {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] intArrayCapital, intArrayLower;

        intArrayCapital = new int[26];
        intArrayLower = new int[26];

        char letter;
        int index;
        int ii;
        int jj;
        int kk;

        for(ii= 0; ii != 26; ii++) {       
            for(jj = 65; jj != 91; jj++) {               
                intArrayCapital[ii] = jj;     
            }
        }

        System.out.println(Arrays.toString(intArrayCapital));
    }
}
长话短说,我想用65到90的数字填写intArrayCapital,这对应于大写拉丁字母的ASCII值。我想用小写字母做一个类似的例子,用另一个For循环,用整数97到122。我将使用第一个FOR循环作为索引,并使用kk创建另一个FOR循环。但我需要确保第一个数组正常工作

这是系统打印时的结果:

[90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90]
这不是我想要的。谁能解释一下我忽略了什么?如何解决这个问题


非常感谢。

您的代码可以大大简化,因为您目前正在使用嵌套循环,而这些循环是不必要的

通常,嵌套循环用于迭代二维数据,如矩阵。您的数据是一维的,因为它只是一个数组,而不是数组数组(例如,
int[][]

以下是简化代码:

public static void main(String[] args) {

    int [] intArrayCapital = new int[26];
    int [] intArrayLower = new int[26];

    for(int i = 0; i < 26; i++) {               
        intArrayCapital[i] = 'A' + i;
        intArrayLower[i] = 'a' + i;
    }

    System.out.println(Arrays.toString(intArrayCapital));
    System.out.println(Arrays.toString(intArrayLower));
}

您的代码可以大大简化,因为您当前使用的嵌套循环是不必要的

通常,嵌套循环用于迭代二维数据,如矩阵。您的数据是一维的,因为它只是一个数组,而不是数组数组(例如,
int[][]

以下是简化代码:

public static void main(String[] args) {

    int [] intArrayCapital = new int[26];
    int [] intArrayLower = new int[26];

    for(int i = 0; i < 26; i++) {               
        intArrayCapital[i] = 'A' + i;
        intArrayLower[i] = 'a' + i;
    }

    System.out.println(Arrays.toString(intArrayCapital));
    System.out.println(Arrays.toString(intArrayLower));
}

归功于@llya Bursov。他先想到的

Scanner sc = new Scanner(System.in);
int[] intArrayCapital, intArrayLower;
intArrayCapital = new int[26];
intArrayLower = new int[26];
char letter;
int index;
int ii;
int jj;
int kk;

for(ii= 0; ii != 26; ii++) {
    intArrayCapital[ii] = 'A' + ii;
}


System.out.println(Arrays.toString(intArrayCapital));

归功于@llya Bursov。他先想到的

Scanner sc = new Scanner(System.in);
int[] intArrayCapital, intArrayLower;
intArrayCapital = new int[26];
intArrayLower = new int[26];
char letter;
int index;
int ii;
int jj;
int kk;

for(ii= 0; ii != 26; ii++) {
    intArrayCapital[ii] = 'A' + ii;
}


System.out.println(Arrays.toString(intArrayCapital));

这里已经有了很好的答案,虽然替代方法很好,但我添加了我的答案,以便OP能够找出代码不能产生正确结果的原因

问题在于嵌套循环。内部循环的结果是在每个索引中放入最后一个90的jj值。你可以自己进行试运行,然后自己解决问题。 用单循环替换可以解决这个问题。下面是您可以使用的3个基本选项

选择1

for(ii= 0, jj =65; ii != 26; ii++, jj++) {         
    intArrayCapital[ii] = jj;
}
选择2

for(ii= 0, jj =65; ii != 26; ii++) {         
    intArrayCapital[ii] = jj+ii;
}
选择3

for(ii= 0; ii != 26; ii++) {         
    intArrayCapital[ii] = 'A' + jj;
}

现在需要注意的是,代码应该易于阅读和维护,以备将来使用。因此,大家建议的方案3是所有方案中最好的方案

这里已经有了很好的答案,虽然替代方法很好,但我添加了我的答案,以便OP能够找出代码不能产生正确结果的原因

问题在于嵌套循环。内部循环的结果是在每个索引中放入最后一个90的jj值。你可以自己进行试运行,然后自己解决问题。 用单循环替换可以解决这个问题。下面是您可以使用的3个基本选项

选择1

for(ii= 0, jj =65; ii != 26; ii++, jj++) {         
    intArrayCapital[ii] = jj;
}
选择2

for(ii= 0, jj =65; ii != 26; ii++) {         
    intArrayCapital[ii] = jj+ii;
}
选择3

for(ii= 0; ii != 26; ii++) {         
    intArrayCapital[ii] = 'A' + jj;
}

现在需要注意的是,代码应该易于阅读和维护,以备将来使用。因此,大家建议的方案3是所有方案中最好的方案

intArrayCapital[ii]=jj应为
intArrayCapital[ii]=“A”+ii并移除内部循环jj@IłyaBursov非常感谢你。我没有意识到,当被指定为整数时,Java会自动将字符转换为ASCII,这意味着第二个循环是冗余的。再次感谢您。
intArrayCapital[ii]=jj应为
intArrayCapital[ii]=“A”+ii并移除内部循环jj@IłyaBursov非常感谢你。我没有意识到,当被指定为整数时,Java会自动将字符转换为ASCII,这意味着第二个循环是冗余的。再次感谢您。但是,前两个选项的缺点是,如果您想同时使用值填充
intArrayLower
,您将需要类似于
jj+32+ii
的东西,当很多数字都是这样硬编码的时候,这就有点让人困惑了。@nexev是的,我完全同意你的观点,但前两个选项的缺点是,如果你想同时用值填充
intArrayLower
,你将需要类似于
jj+32+ii的东西,当很多数字都以这种方式硬编码时,它会变得有点混乱。@Nexevis Yes完全同意你的看法