Java 使用来自用户的数据逐渐填充数组
我试图用用户输入的单词填充数组。每个单词必须比前一个单词长一个字母,比下一个单词短一个字母。它们的长度等于表行索引,从2开始计算。文字最终会形成一个单面金字塔,如:Java 使用来自用户的数据逐渐填充数组,java,arrays,conditional,fill,java.util.scanner,Java,Arrays,Conditional,Fill,Java.util.scanner,我试图用用户输入的单词填充数组。每个单词必须比前一个单词长一个字母,比下一个单词短一个字母。它们的长度等于表行索引,从2开始计算。文字最终会形成一个单面金字塔,如: A AB ABC ABCD Scanner sc=新扫描仪(System.in); System.out.println(“给出数组的高度:”); 高度=sc.nextInt(); 字符串[]字=新字符串[高度]; 对于(int i=2;ii-2 | |字[i-2]。长度() 您没有从Scanner读取height(值是多少?) 您
A
AB
ABC
ABCD
Scanner sc=新扫描仪(System.in);
System.out.println(“给出数组的高度:”);
高度=sc.nextInt();
字符串[]字=新字符串[高度];
对于(int i=2;ii-2 | |字[i-2]。长度()
您没有从Scanner
读取height
(值是多少?)
您确定不允许使用列表
和其他可动态增长的数据结构吗
如果不满足长度要求,该怎么办
为什么2
和-2
偏移?
- 当
i=2
时,您还可以访问words[i-3]
。这将抛出ArrayIndexOutOfBoundsException
这里有一个改写,使逻辑更加清晰:
Scanner sc = new Scanner(System.in);
System.out.println("Height?");
while (!sc.hasNextInt()) {
System.out.println("int, please!");
sc.next();
}
final int N = sc.nextInt();
String[] arr = new String[N];
for (int L = 1; L <= N; L++) {
String s;
do {
System.out.println("Length " + L + ", please!");
s = sc.next();
} while (s.length() != L);
arr[L - 1] = s;
}
for (String s : arr) {
System.out.println(s);
}
Scanner sc=新扫描仪(System.in);
System.out.println(“高度?”);
而(!sc.hasnetint()){
System.out.println(“int,请!”);
sc.next();
}
最终整数N=sc.nextInt();
字符串[]arr=新字符串[N];
对于(int L=1;L奇怪的任意要求,8个重复,笨拙的编码风格,没有真正的问题?当然,家庭作业.Aigh.Scanner不应该这样做。(是吗?)数据应该一直读取直到要求被满足。我可以使用列表,但我仍然必须限制每个输入的单词。@neville:你可以使用next()
添加到一个临时变量,并检查它是否满足条件,如果不满足条件,请再次询问。查看我的答案,尤其是执行while
。
Scanner sc = new Scanner(System.in);
System.out.println("Height?");
while (!sc.hasNextInt()) {
System.out.println("int, please!");
sc.next();
}
final int N = sc.nextInt();
String[] arr = new String[N];
for (int L = 1; L <= N; L++) {
String s;
do {
System.out.println("Length " + L + ", please!");
s = sc.next();
} while (s.length() != L);
arr[L - 1] = s;
}
for (String s : arr) {
System.out.println(s);
}