我正在尝试从数据库格式化数据,以便所有内容彼此之间的距离相同(基本上使您的眼睛更容易)。我正陷入" ArrayIndexOutOfBoundsException"的困境。我希望得到stackoverflow这个伟大社区的帮助,以帮助我和许多其他人解决这个问题。
希望我犯了一个愚蠢的错误,并且不必完全重写。
public static String formattedString(char[] c, int len1, char[] d, int len2,
char[] e, int len3) {
List<Character> charlist = new ArrayList<Character>(len1);
for (int i = 0; i < len1; i++) {
if (c.length == len1 || c.length > len1) {
charlist.add(c[i]);
} else if (c.length < len2) {
if (c.length < len1)
charlist.add(c[i]);
else
charlist.add(' ');
} else {
charlist.add('#');
}
}
List<Character> charlist2 = new ArrayList<Character>(len2);
for (int i = 0; i < len2; i++) {
if (d.length == len2 || d.length > len2) {
charlist2.add(d[i]);
} else if (d.length < len2) {
if (d.length < len2)
charlist2.add(d[i]);
else
charlist2.add(' ');
} else {
charlist2.add('#');
}
}
List<Character> charlist3 = new ArrayList<Character>(len3);
for (int i = 0; i < len3; i++) {
if (e.length == len3 || e.length > len3) {
charlist3.add(e[i]);
} else if (e.length < len2) {
if (i < len3)
charlist3.add(e[i]);
else
charlist3.add(' ');
} else {
charlist3.add('#');
}
}
String s = charlist.toString() + charlist2.toString()
+ charlist3.toString() + '\n';
return s;
}
使用formattedString
函数,您可以执行以下操作
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/table", user, password);
Statement stmt = null;
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String username = rs.getString("user_name");
double balance = rs.getDouble("balance");
String b = balance + "";
int accountID = rs.getInt("account_ID");
String id = accountID + "";
Q.print(Q.formattedString(username.toCharArray(), 10, b.toCharArray(), 15, id.toCharArray(), 10));
// This is the proper way to use the function.
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
请注意,我的问题不是连接到DB而是使用formattedString函数 的 _______________________ UPDATE _______________________
线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:6 在co.kbcomp.java.server.usermanagement.Q.formatedString(Q.java:58) 在co.kbcomp.utils.Command.getAllUsers(Command.java:211) 在co.kbcomp.utils.Command.execute(Command.java:28) 在co.kbcomp.java.server.Main。(Main.java:27) 在co.kbcomp.java.server.StartServer.main(StartServer.java:5)
答案 0 :(得分:1)
我建议你这样做:
Q.formattedString(username.toCharArray(), username.length(), b.toCharArray(), b.length(), id.toCharArray(), id.length())
当每个字符串变量可能包含长度小于您定义的最大长度的字符串时,可能会发生错误。
(10,15和10 - 分别为username
,b
和id
因此,最好测量每个变量的长度并将其用作参数..
<强>更新强>:
我明白了,所以你想要长度一致的字符串..
也许你只是错误输入了一些变量名..
public static String formattedString(char[] c, int len1, char[] d, int len2,
char[] e, int len3) {
List<Character> charlist = new ArrayList<Character>(len1);
for (int i = 0; i < len1; i++) {
if (c.length == len1 || c.length > len1) {
charlist.add(c[i]);
} else if (c.length < len1) { //<--here
if (c.length < len1)
charlist.add(c[i]);
else
charlist.add(' ');
} else {
charlist.add('#');
}
}
List<Character> charlist2 = new ArrayList<Character>(len2);
for (int i = 0; i < len2; i++) {
if (d.length == len2 || d.length > len2) {
charlist2.add(d[i]);
} else if (d.length < len2) {
if (d.length < len2)
charlist2.add(d[i]);
else
charlist2.add(' ');
} else {
charlist2.add('#');
}
}
List<Character> charlist3 = new ArrayList<Character>(len3);
for (int i = 0; i < len3; i++) {
if (e.length == len3 || e.length > len3) {
charlist3.add(e[i]);
} else if (e.length < len3) { //<--here
if (i < len3)
charlist3.add(e[i]);
else
charlist3.add(' ');
} else {
charlist3.add('#');
}
}
String s = charlist.toString() + charlist2.toString()
+ charlist3.toString() + '\n';
return s;
}
答案 1 :(得分:0)
可能发生ArrayIndesOutOfBoundsException的唯一原因是因为username.toCharArray(),b.toCharArray()和id.toCharArray()的长度分别超过10,15和10。
在formattedString函数中,您可以使用c [i],d [i]和e [i]访问这些数组,其中i应分别介于0到10,15,10之间。
建议删除这种情况是打印username.toCharArray(),b.toCharArray()和id.charArray()的长度,然后确保何时将它传递给它保持在for的范围内的函数循环变量。
答案 2 :(得分:0)
我只是想让大家知道我的解决方案,如下所示。
public static String formattedString(char[] c, int len1, char[] d, int len2, char[] e, int len3) {
char[] charlist = new char[len1];
for (int i = 0; i < len1; i++) {
if (c.length == len1 || c.length > len1) {
charlist[i] = (c[i]);
} else if (c.length < len1) { // <--here
if (c.length > i)
charlist[i] = (c[i]);
else
charlist[i] = ' ';
} else {
charlist[i] = '#';
}
}
char[] charlist2 = new char[len2];
for (int i = 0; i < len2; i++) {
if (d.length == len2 || d.length > len2) {
charlist2[i] = (d[i]);
} else if (d.length < len2) {
if (d.length > i)
charlist2[i] = (d[i]);
else
charlist2[i] = ' ';
} else {
charlist2[i] = '#';
}
}
char[] charlist3 = new char[len3];
for (int i = 0; i < len3; i++) {
if (e.length == len3 || e.length > len3) {
charlist3[i] = (e[i]);
} else if (e.length > i) { // <--here
if (i < len3)
charlist3[i] = (e[i]);
else
charlist3[i] = ' ';
} else {
charlist3[i] = '#';
}
}
String s ="";
int i = 0;
for(char a : charlist){
s += a;
}
for(char a : charlist2){
s += a;
}
for(char a : charlist3){
s += a;
}
return s+'\n';
}