为了账号安全,请及时绑定邮箱和手机立即绑定

6.5课后练习程序求指导 数组越界?

package sss;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class collectionstest {


    public void sorttext3(){
        List<String> a = new ArrayList<String>();
        //String[] b = new String[10];
        String st = "abcdefghijklmnopqrstuvwxyz"
                + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                + "0123456789";
        Random c = new Random(10);
        int i=0;
        StringBuffer sb = new StringBuffer();
        
            for(int z=0;z<10;z++){
            
                do{
                    int j=c.nextInt();
                for(;i<j;i++){
                Random d = new Random(62);
                int num = d.nextInt();
                sb.append(st.charAt(num));
                   }
                }while(a.contains(sb.toString()));
                a.add(sb.toString());
           }
        System.out.println("···········排序前");
            for (String string : a) {
                System.out.println("元素"+a);
            }
            
            Collections.sort(a);
            
        System.out.println("``````````排序后");    
            for (String string : a) {
                System.out.println("元素 "+a);
            }
        
        
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        collectionstest a = new collectionstest();
//        a.testsort1();
//        a.sortText2();
        a.sorttext3();
    }

}

正在回答

4 回答

Random num=new Ramdom(62);这条语句是可以出现62的,但是你的String st 的范围为0~61,所以会出现越界,
另外你的foreach语句遍历a,为什么不System.out.println(string);而要输出a那?

0 回复 有任何疑惑可以回复我~
#1

qq_什么亡魂溺海没有跳海实在_03283094 提问者

非常感谢!
2016-12-12 回复 有任何疑惑可以回复我~
#2

qq_什么亡魂溺海没有跳海实在_03283094 提问者

谢谢 我输出a 那个是手误了 我还想 怎么按照楼上那个代码修改完是一个二维数组呢 谢谢 你解答了我两个问题
2016-12-12 回复 有任何疑惑可以回复我~
#3

rjyb22 回复 qq_什么亡魂溺海没有跳海实在_03283094 提问者

不用谢,以后你看见别人提的问题,自己会也帮帮别人就好。
2016-12-12 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//58b2da760001078413660768.jpg

random(i)取的数不是0-(i-1么?

0 回复 有任何疑惑可以回复我~

  public void sorttext3(){

        List<String> a = new ArrayList<String>();

        //String[] b = new String[10];

        String st = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        Random c = new Random();


            for(int z=0;z<10;z++){

            StringBuffer sb = new StringBuffer();

                do{

                    int j=c.nextInt(10)+1;

                for(int i=0;i<j;i++){

                //Random d = new Random(62);

                int num = c.nextInt(st.length());

                sb.append(st.charAt(num)); 

                   }

                }while(a.contains(sb.toString()));

                a.add(sb.toString());

           }


把你的StringBuffer 对象放到了for循环里了 ,要不每次循环,都会把之前循环过了字符串加里面,还有就是数组越界,不清楚怎么回事,不过改的代码,是没问题的!


1 回复 有任何疑惑可以回复我~
#1

qq_什么亡魂溺海没有跳海实在_03283094 提问者

不好意思阿 我以为可以选两个最佳 = = 你的回答也很好
2016-12-12 回复 有任何疑惑可以回复我~

你定义的st,直接把所有的元素写在一起,应该就好了。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

6.5课后练习程序求指导 数组越界?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信