DESKTOP-94E2ELT_20200829-刘雪丽
一、问题
这次字符碎片的题,我在考试结束之后自己尝试这敲了代码,有简单的方法,当然我的就是比较麻烦点的。先上代码:
public class Abc {
public void A(String s) {
byte[] b=s.getBytes();
int p=0,t=0;
for(int x=0;x<b.length;x++){
for(int y=x;y<b.length;y++) {
if(x==y&x==b.length-1&b[b.length-1]!=b[b.length-2]) {
t+=1;
++p;
break;
}
if(b[x]!=b[y]) {
++p;
t+=(y-x);
x=y-1;
break;
}
}
}
double a=(double)t/p;
System.out.println(a);
}
public static void main(String[] args) {
Abc q=new Abc();
Scanner e=new Scanner(System.in);
String s=e.next();
q.A(s);
}
有这么一行代码
if(x==y&x==b.length-1&b[b.length-1]!=b[b.length-2])
我一直想不通为啥明明x跟数组长度一样,用x替换数组长度会下标越界,但不换就是正确的?
if(x==y&x==b.length-1&b[x]!=b[x-2])
这样会越界
解决:
我在写日志的时候发现自己就是来搞笑来的,答案很简单,上面只是个条件,本来就没有赋值。结果是这样是对的
if(x==y&x==b.length-1) {
if(b[b.length-1]!=b[b.length-2]) {
if(x==y&x==b.length-1) {
if(b[x]!=b[x-1]) {
其实问题在于我用的运算符的时候一直用的&,而不是&&,一个&的时候就算前面条件不满足,后边的也会执行,所以才会有下标越界。
if(x==y&x==b.length-1&&b[x]!=b[x-1]) {
这样就算彻底解决了。
吐槽
吐槽一下我自己,想问题的时候不全面,不通透,还容易钻牛角尖。注意是不够的,应该尽全力避免这种错误。不然就省一顿饭。省钱还减肥。
点赞