这个程序应该使用StringBuilder
来连接放入字符串数组中的每个单词,形成一个整数字符串,用空格分隔。对于我的输出,我什么也得不到,因为我尝试捕获异常,但它似乎是一个ArrayIndexOutofBounds异常。我的代码在哪里有缺陷?
package practice;
import java.util.Scanner;
import java.io.*;
public class Stitching {
public String stitch(String... words) {
String wordsAsArray[] = words;
StringBuilder sb = new StringBuilder();
for(int i=0;i<=wordsAsArray.length;i++){
sb.append(words[i]);
}
return sb.toString();
}
public static void main(String args[]) {
try{
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please enter a line of words: ");
String line = br.readLine();
String wordsAsArray[] = line.trim().split("\\s+");
Stitching stitching = new Stitching();
System.out.println("Output: ");
System.out.println(stitching.stitch(wordsAsArray));
} catch(Exception e){}
}
}
答案 0 :(得分:1)
问题是for
循环:
for(int i=0;i<=wordsAsArray.length;i++)
由于ArrayIndexOutOfBounds
比较,这会抛出<=
例外。而是使用
for(int i=0;i<wordsAsArray.length;i++)
在运行此代码时,您没有发现问题,因为您正在使用try-catch
阻止捕获异常。
捕获异常时,应该执行某种日志记录;对于快速测试,一个很好的例子是:
try {
// Code here...
}catch (Exception e) {
e.printStackTrace();
}
这将打印导致它进入控制台的异常类型和代码跟踪。
答案 1 :(得分:0)
stitch
的代码非常接近正确。
public String stitch(String... words) {
// String wordsAsArray[] = words; // <-- redundant
StringBuilder sb = new StringBuilder();
for (int i=0; i < words.length; i++){ // <-- Less then, not less then equal
if (i != 0) {
sb.append(' '); // <-- let's add a space between the words.
}
sb.append(words[i]);
}
return sb.toString();
}
另外,如果你没有默默地忽略你的异常,你自己会看到for循环的问题。
} catch(Exception e) {
e.printStackTrace(); // <-- print the Exception
}
答案 2 :(得分:0)
正如Caleb所说,for(int i=0;i<=wordsAsArray.length;i++)
会抛出ArrayIndexOutOfBoundsException
现在,如果你想知道为什么ArrayIndexOutOfBoundsException
好 - 在运行时检查所有数组访问;尝试使用小于零或大于或等于数组长度的索引会导致ArrayIndexOutOfBoundsException
被抛出
这可能应该修复你的代码
for(int i=0;i<wordsAsArray.length;i++){
sb.append(words[i]+" ");
}