日期:2014-05-20  浏览次数:20750 次

急!!!请问此段Java代码问题出在哪里 ,for 循环走不完这退出


import java.util.*;
public class Ss {
  /* 从数组sb 中读出字符串,并分割成新数组
  比较新数组的元素,对于指定元素个数相同的,放入二维数组中,以此来分类 */

public static void main (String args[]){

String[]sb={"a b c","b c d","a c d"};
ArrayList<String> al=new ArrayList<String>();
String[][]a=new String[10][];
int []c=new int[3];
for (int i=0;i<sb.length;i++) {al.add(sb[i]);}

Iterator<String> it=al.iterator();

a: while(it.hasNext()){
String s1=al.get(0);
String[]str0=s1.split(" "+0);  
String s=it.next();
String []str=s.split(" "+0);

int t=0 ;
int l=0;
int k=0;
for(int i=0;i<str0.length;i++) 
for (int j=0;j<str.length;j++){
if(str0[i]==str[j])k++;
System.out.println("c[0]:"+cl.size()); }
if(k>=2) {  
a[k][l]=s;
bl.add(s);
 
System.out.println("k:"+k);
System.out.println("l:"+l);
}
k=0;
if( !it.hasNext()){
l++;
al.remove(bl);
System.out.println("l:"+l);  
continue a;
}  
}
 
}
}


------解决方案--------------------
Java code

import java.util.*;

public class CompanyTest {
    /*
     * 从数组sb 中读出字符串,并分割成新数组 比较新数组的元素,对于指定元素个数相同的,放入二维数组中,以此来分类
     */

    public static void main(String args[]) {
        String[] sb = { "a b c", "b c d", "a c d" };
        ArrayList<String> al = new ArrayList<String>();
        ArrayList<String> del = new ArrayList<String>();
        String[][] a = new String[10][10]; //要么一并,声明了,要么后面自己声明

        for (int i = 0; i < sb.length; i++) {
            al.add(sb[i]);
        }

        Iterator<String> it = al.iterator();

        while (it.hasNext()) {
            String s1 = al.get(0);
            String[] str0 = s1.split(" ");//看不懂你这个" "+0是上面意思?
            System.out.println(str0.length);
            String s = it.next();
            String[] str = s.split(" ");//看不懂你这个" "+0是上面意思?

            int l = 0;
            int k = 0;
            for (int i = 0; i < str0.length; i++)
                for (int j = 0; j < str.length; j++) {
                    if (str0[i].equals(str[j]))
                        k++;
                }
            System.out.println("k:" + k);//这里有点小问题。还有你的大括号最好加起来,不好调试的。
            if (k >= 2){
                a[k][l] = s;//空指针异常,原因看上面
                del.add(s);
            }
            k = 0;
            if (!it.hasNext()) {
                l++;
                al.removeAll(del);//这里也有问题,用removeAll是对集合的操作。 remove是对元素的操作。不一样的。
                System.out.println("l:" + l);
                continue; //不用加 标记就可以实现。再说如果后面没有代码,continue,也可以不要了。
            }
        }

    }
}

------解决方案--------------------
Java code

import java.lang.reflect.Array;
import java.util.*;

public class CompanyTest {
    /*
     * 从数组sb 中读出字符串,并分割成新数组 比较新数组的元素,对于指定元素个数相同的,放入二维数组中,以此来分类
     */

    public static void main(String args[]) {
        String[] sb = { "a b c", "b c d", "a c d", "a d e", " a f e" };
        ArrayList<String> al = new ArrayList<String>();
        ArrayList<String> del = new ArrayList<String>();
        String[][] a = new String[sb.length][sb.length];

        for (String s : sb) {
            al.add(s);
        }

        int rowA = 0;
        while (al.size() != 0) {
            int colA = 0;
            for (String tempStr : al) {
                String s1 = al.get(0);
                String[] str0 = s1.split(" ");
                System.out.println(str0.length);
                String[] str = tempStr.split(" ");
                int k = 0;
                for (int i = 0; i < str0.length; i++) {
                    for (int j = 0; j < str.length; j++) {
                        if (str0[i].equals(str[j])) {
                            k++;
                        }
                    }
                }
                System.out.println("k:" + k);
                if (k >= 2){
                    
                    a[rowA][colA++] = tempStr;
                    del.add(tempStr);
                }
            }
            al.removeAll(del);
            rowA++;
        }

        for (String[] temp : a) {
            System.out.println(Arrays.toString(temp));
        }
    }
}