whisperun
whisperun
2019-05-09 22:11
采纳率: 33.3%
浏览 410

eclipse程序 app一运行就停止,请问哪点出错了?

package com.example.caipiao;

import java.util.Iterator;
import java.util.TreeSet;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
private Button torich;
private TextView richnum;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    torich=(Button)findViewById(R.id.torich);
    richnum=(Button)findViewById(R.id.richnum);
    torich.setOnClickListener(new OnClickListener (){
         @Override
         public void onClick(View v)
         {
             createLottery();
         }
         });

    }

protected void createLottery() {
    {TreeSet<Integer>set=new TreeSet<Integer>();
    while (set.size()<6){set.add((int)(Math.random()*49+1));
    }
    richnum.setText("");
    Iterator<Integer>iterator=set.iterator();
            while(iterator.hasNext()){
                int num=iterator.next();
                richnum.append(num+" ");
            }

    }
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • MacaoPark
    Xia_燚 2019-05-10 10:14
    已采纳

    你好 我在上个问题中回答了 这个问题,发现居然是两个一样的问题 =_=

    protected void createLottery() {
        {
            TreeSet<Integer> set = new TreeSet<Integer>();
            while (set.size() < 6) {
                set.add((int) (Math.random() * 49 + 1));
            }
    
            Iterator<Integer> iterator = set.iterator();
            StringBuffer stringBuffer = new StringBuffer();
            while (iterator.hasNext()) {
                int num = iterator.next();
                Log.e("111", num + "");
                stringBuffer.append(num+"-");
                //richnum.append(num+" ");
            }
            richnum.setText(stringBuffer);
        }
    }
    

    接下来我说一下原因 就在这句 richnum.append(num+" "); 你的(num+" ") 是一个Sring 不可改变,当你每次遍历后,就会不断的给这个Sting 赋值,因为Sting为不可变对象,在为这个String追加数据的时候,就会导致索引越界 最终导致的crash。

    【以下是Sting 与StringBuffer 的区别】

    (1)String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承

    (2)StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中付值的时候可以通过它的append方法.

    点赞 评论

相关推荐