import java.util.*; 
public class SortInt { public static void main(String[] args){ 
Scanner sc=new Scanner(System.in); 
System.out.println("请输入INT个数"); 
int length=sc.nextInt(); List<Integer> list=new ArrayList<Integer>(); int data; 
for(int i=0;i<length;i++) 

System.out.println("请输入数据:"); 
data=sc.nextInt(); 
list.add(data); 

int result=0; 
for(int o=0;o<length-1;o++){ int a=list.get(0); for(int i=0;i<length-2;i++) 

if(a>list.get(i+1)){ 
result=a; 

else 

result=list.get(i+1); 

a=result;//这里好像跳出了循环 } 
int index=list.indexOf((Object)new Integer(result)); 
list.remove(index); 
System.out.println(result); 

System.out.println(list.get(0)); 


解决方案 »

  1.   

    import java.util.Scanner;
    public class SortInt { public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入INT个数");
    int length=sc.nextInt();

    List<Integer> list=new ArrayList<Integer>();
     
    int data;
    for(int i=0;i<length;i++)
    {
    System.out.println("请输入数据:");
          data=sc.nextInt();
    list.add(data);
    }
    int result=0;
    int length2=length;
    for(int o=0;o<(length-1);o++){

    int a=list.get(0);
    //int length2=length;

    for(int i=0;i<length2-1;i++)
    {  
    //int a=list.get(0);

    if(a>list.get(i+1)){
    result=a;
    }
    else
    {
    result=list.get(i+1);
    }
    //a=result;
    //System.out.println(result);
    a=result;

    }
    int index=list.indexOf((Object)new Integer(result));
    Integer in= list.remove(index);
    System.out.println(in);
    length2=length2-1;
    }
    System.out.println(list.get(0));
    }
    }
      

  2.   

    低级错误,都不知该怎么解释好
    首先3个变量的时候,length=3,开始list里有3个元素
    for(int o=0;o <length-1;o++){leng-1=2,这里要循环o=0, o=1两次,我们把这里叫作大循环
    第一次大循环
    走到这里for(int i=0;i <length-2;i++) length-2=1,这里有循环一次,也就是只循环i=0的一次,我们把这里叫作小循环
    小循环走一次,得到result,然后小循环结束,走到
    int index=list.indexOf((Object)new Integer(result));  
    list.remove(index);  //这个是关键,LZ先看清楚
    System.out.println(result);     
    这样第一次大循环结束,此时list里还有2个元素第二次大循环
    走到小循环,小循环走一次,得到result,然后小循环结束,走到
    int index=list.indexOf((Object)new Integer(result));  
    list.remove(index);  //这个是关键,LZ先看清楚
    System.out.println(result);     
    这样第二次大循环结束,此时list里还有1个元素大循环全部结束,走到System.out.println(list.get(0));  
    此时list里还有元素,所以list.get(0)能取到数据,于是程序正常结束好,现在来看length=4的时候,开始list里有4个元素
    for(int o=0;o <length-1;o++){leng-1=2,这里要循环o=0, o=1, o=2三次,我们把这里叫作大循环
    第一次大循环
    走到这里for(int i=0;i <length-2;i++) length-2=2,这里有循环两次,即i=0, i=1,我们把这里叫作小循环,i=1是关键,LZ请注意
    小循环正常结束,得到一个result,然后走到
    int index=list.indexOf((Object)new Integer(result));  
    list.remove(index);  //这个是关键,LZ先看清楚
    System.out.println(result);     
    这样第一次大循环结束,此时list里还有3个元素第二次大循环
    走到小循环,小循环正常结束,得到result,然后走到
    int index=list.indexOf((Object)new Integer(result));  
    list.remove(index);  //这个是关键,LZ先看清楚
    System.out.println(result);     
    这样第二次大循环结束,此时list里还有2个元素
    第三次大循环
    走到小循环,关键的地方来了
    第一次小循环,i=0,i+1=1,list里还有两个元素,
    list.get(i+1)就是list.get(1),list并没有越界,于是第一次小循环正常结束
    接着第二小循环,i=1, i+1=2, list里还有两个元素
    而此时list.get(i+1)就是list.get(2), 可见这里list越界了
    list.get(2)是取第三个元素,而list本身只有2元素,所以就产生异常了


    在固定循环中,删除类似于list这样的集合元素,一定要特别注意越界的问题
    最简单的测试方法
    List<String> list = new ArrayList<String>();
    for (int i=0; i<3; i++) {
        list.add(""+i); //这里增加元素,list有3个元素
    }for (int i=0; i<list.length; i++) {
        list.remove(i); //这里是删除元素,这里就会发生越界异常,LZ自己分析吧,弄清楚这里,你就弄清楚你的问题了
    }

      

  3.   

    恩。。谢谢LS的这个我后来也发现了所以写了length=length-1嘛...可是循环内操作length好像也会改变循环次数...导致后几个数读不出来..我试了好久才搞明白定义了一个length2...本人菜鸟说得不对请指教