public class SeboResult {
public static void main(String[] args) {
String sebo = SeboResult.getSebo();
System.out.println(sebo);
}
public static String getSebo() {
//红波 蓝波 绿波
List<String> data = new ArrayList<>();
data.add("红波");
data.add("蓝波");
data.add("绿波");
int count = (int) (Math.random() * data.size());
System.out.println("============"+count);
//结果
StringBuilder result = new StringBuilder();
//获取随机索引
//set去重复
Set<Integer> set = new HashSet<>();
for (int i=0;i<count;i++){
int index = (int) (Math.random() * data.size());
int size = set.size();
set.add(index);
//判断重复
if(set.size() == size) {
i--;
continue;
}
}
//5.去除默认逗号
if(',' == result.charAt(result.length()-1))
result = result.deleteCharAt(result.length()-1);
// System.out.println(result);
return result.toString();
}
}
//这段代码报错:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.AbstractStringBuilder.charAt(AbstractStringBuilder.java:237)
at java.lang.StringBuilder.charAt(StringBuilder.java:76)
at SeboResult.getSebo(SeboResult.java:39)
at SeboResult.main(SeboResult.java:11)
兄弟?将StringBuilder result = new StringBuilder();改为StringBuilder result = new StringBuilder("");
charAt仔细看,你的result 没有任何数据,你还想获取?你获取 result 索引号-1的值?
长度是 0 的 stringbuffer 所以出问题了。
StringBuilder为空,最好debugger断点看看getSebo方法是哪一步代码有问题。
代码意图不明确 建议下次提问先说明你程序的意图是要干啥 别人才能知道如何修改和回答你的问题
首先告诉别人你的代码意图在哪里,不讲意图,你就看看你的StringBuilder,进行循环操作后,Set集合是不重复了(不明白放在这里是干嘛用的,大概你是想给这几个光波名字排序还是什么的),你index有了值,可是你的result是新new的一个,什么都没干你就判断,他的长度本身就位0,而且你还要应该在判断前加上result是否是个空串就是为了防止报你这个错误
看不懂你要表达什么,逻辑语音组织清楚了再来描述吧
import java.util.*;
public class SeboResult {
public static void main(String[] args) {
String sebo = SeboResult.getSebo();
System.out.println(sebo);
}
public static String getSebo() {
//红波 蓝波 绿波
List data = new ArrayList<>();
data.add("红波");
data.add("蓝波");
data.add("绿波");
int count = (int) (Math.random() * data.size());
System.out.println("============"+count);
//结果
StringBuilder result = new StringBuilder();
//获取随机索引
//set去重复
Set set = new HashSet<>();
for (int i=0;i<count;i++){
int index = (int) (Math.random() * data.size());
int size = set.size();
set.add(index);
result.append(index);//改了!!!!!!!!!!!!!!!
//判断重复
if(set.size() == size) {
i--;
continue;
}
}
//5.去除默认逗号
//System.out.println(result);
if(result.length()!=0 &&',' == result.charAt(result.length()-1))//改了!!!!!!!!!!!!!!!
result = result.deleteCharAt(result.length()-1);
return result.toString();
}
}
不知道你的意图是什么,就随便改了下,因为你原来建立的StringBuilder是空的,你想获得他的索引会报错的,获得一个不正确的索引会报错,感觉你的result是想加点什么吧?这里就给你加了随机产生的index