java吧 关注:1,305,174贴子:12,869,767
  • 6回复贴,共1

请教个小问题

取消只看楼主收藏回复

比如:LinkedList dl=new LinkedList;
int a=dl.poll();这句话有错误吗?编译抛出NullPointerException
还有假如我还创建了个函数
public staitc void isLock(LinkedList dl,int x,int y)
{
。。。
}
如果在主函数中调用
main()
{
。。。
isLock(dl,a,b)//同样抛出同样的错误,求解
}
求高手指点


1楼2012-06-06 21:21回复
    求大神们帮忙啊,楼主LinkedList部分知识比较贫瘠,错误异常也比较薄弱,求解


    2楼2012-06-06 21:25
    回复
      2026-06-30 08:00:39
      广告
      不感兴趣
      开通SVIP免广告
      我截取了一部分程序,简化了下问题,意思大概差不多,抛出了异常,源程序代码长


      4楼2012-06-06 22:13
      回复
        import java.util.LinkedList;
        public class IsLock
        {
        static int [][]arr1=new int[1000][4];
        static int[][]arr0={{-1,1,-1,1},{1,-1,0,0},{0,0,1,-1}};
        static LinkedList<Integer> dl = new LinkedList<Integer>();
        static int []x={2,0,2,0};
        public static void main(String args[])
        {
        dl.addLast(0);
        for(int i=0;i<4;i++)
        {
        arr1[0][i]=x[i];
        }
        while(!dl.isEmpty())
        {
        pollArr(dl,arr1,x);//队列中弹出一个元素,对应的数据存储到临时容器数组x中
        newPoint(arr1,x,dl); //弹出的节点对应进行操作,判断是否更新
        Lock(x,arr0,dl);//对结点进行往下遍历操作判断是否产生死锁
        }
        for(int k=0;k<arr1[k].length;k++)
        {
        int count2=0,count3=0;
        for(int y=0;y<4;y++)
        {
        count2++;
        if(arr1[k][y]==0) count3++;
        System.out.print(arr1[k][y]+"\r");
        }
        if(count3==4) break;
        else if(count2==4) System.out.println();
        }
        }
        //队列poll弹出元素,对应状态数组中对应的一组数据
        public static void pollArr(LinkedList<Integer> dl,int[][] arr1, int[]x)
        {
        int a=dl.pollFirst();
        for(int i=0;i<4;i++)
        {
        x[i]=arr1[a][i];
        }
        }
        /* 更新状态结点 数组 */
        // 判断结点是否是新结点
        public static void newPoint(int arr[][],int x[],LinkedList<Integer> dl)
        {
        int n = 0;
        for(int a=0;a<arr[a].length;a++)
        {
        int count2=0;
        for(int b=0;b<arr[0].length;b++)
        {
        if(arr[a][b]==x[b])
        count2++;
        }
        if (count2==4)
        {
        n=0;
        break;
        }
        else if (a==(arr[a].length-1))
        n=1;
        }
        //结点判断存储
        if(n==1) //是新结点,更行状态数组
        {
        for(int i=0;i<arr[i].length;i++)
        {
        int count1=0;
        for(int j=0;j<4;j++)
        {
        if (arr[i][j]!=0) break;
        else count1++;
        }
        if(count1==4)
        {
        for(int j=0;j<4;j++) { arr[i][j]=x[j];
        } } } }
        else pollArr(dl,arr1,x);//不是新结点,调用队列弹出一组数据
        }
        //判断是否产生死锁
        public static void Lock(int []x,int [][]arr0,LinkedList <Integer> dl)
        {
        int count=0;
        for(int i=0;i<3;i++)
        {
        int k=0;
        for(int j=0;j<4;j++)
        {
        int temp;
        temp=x[j]+arr0[i][j];
        if(temp<0)
        {
        count++;
        k++;
        break; }
        else if(k==0) pollArr(dl,arr1,x);
        }
        }
        if(count==3)
        System.out.println("产生死锁");
        } }
        


        6楼2012-06-06 22:22
        回复
          这是楼主编写的代码,
          问题是:判断是否产生死锁,给定结点{2,0,2,0,}通过矩阵判断是否产生死锁{{-1,1,-1,1},{1,-1,0,0},{0,0,1,-1}}初始结点跟这三个结点相加如果有负数产生那这个结点不存在,三次相加如果都是负数那么宣布死锁,没有的话,产生的新结点将存入队列,然后从队列中poll出新的结点继续遍历,知道队列中结点poll为空


          7楼2012-06-06 22:27
          回复
            面向对象楼主貌似还没领悟透,也许编程编的比较少,编写的有点不伦不类,求大神帮我分析下代码中抛出的异常,指点下程序中还隐藏的错误


            8楼2012-06-06 22:28
            回复
              谢了,哥们,懂了


              11楼2012-06-07 13:09
              回复