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完全同意你的看法