java吧 关注:1,296,656贴子:12,833,521
  • 9回复贴,共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-02-02 13:31:39
      广告
      不感兴趣
      开通SVIP免广告
      表示没抛出错误 你代码写错了,这个应该是没问题的


      IP属地:广东3楼2012-06-06 21:33
      回复
        我截取了一部分程序,简化了下问题,意思大概差不多,抛出了异常,源程序代码长


        4楼2012-06-06 22:13
        回复
          LinkedList ll=new LinkedList();
          ll.poll();
          这样是没问题的
          你的代码写错了呗


          IP属地:上海5楼2012-06-06 22:17
          回复
            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
                回复
                  2026-02-02 13:25:39
                  广告
                  不感兴趣
                  开通SVIP免广告
                  pollArr(dl,arr1,x);//队列中弹出一个元素,对应的数据存储到临时容器数组x中
                  newPoint(arr1,x,dl); //弹出的节点对应进行操作,判断是否更新
                  Lock(x,arr0,dl);//对结点进行往下遍历操作判断是否产生死锁
                  一开始你dl里有个0 然后你做第一步pollArr的时候把它弹出来了
                  然后你比较newPoint 发现是旧的 然后又pollArr 肯定null了
                  


                  IP属地:浙江10楼2012-06-06 23:01
                  回复
                    谢了,哥们,懂了


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