Arraylist生成第一个元素为null

时间:2014-10-27 11:02:58

标签: java algorithm arraylist

我一直在尝试实现Dijkstra算法。以下是读取输入的代码:

            System.out.println("Enter the number of Cities ");
            int no_Of_Cities = scannerObj.nextInt();
            List<Vertex> Vertices = new ArrayList<Vertex>(no_Of_Cities) ;
            for (int itr = 0; itr < no_Of_Cities; itr++){
                  System.out.println("Enter the details for city "+itr+": ");
                  System.out.println("Name of the vertex: ");
                  String name = new String(scannerObj.nextLine());
                  Vertex vertexObj = new Vertex(name);
                  Vertices.add(vertexObj);
                  }
            display(Vertices);

,显示功能如下:

      public static void display(List<Vertex> vertices){
            int length = vertices.size();
            for(int i =0;i<length;i++){
                  System.out.println();
                  System.out.println("Entry for i ="+i+" is: "+vertices.get(i).getName());
            }
      }

当我尝试执行代码时,以下是我得到的输出:

  

输入城市数量   3

     

输入城市0的详细信息:

     

顶点的名称:   一个

     

请输入城市1的详细信息:

     

顶点的名称:   B'/ P>      

请输入城市2的详细信息:

     

顶点的名称:   ç

     

i = 0的条目是:

     

i = 1的条目是:a

     

i = 2的条目是:b

任何人都可以解释我犯错误的地方吗?

注意:Vertex是另一个类,它只保存顶点的必要细节,如名称和边数组。

2 个答案:

答案 0 :(得分:3)

添加scannerObj.nextLine();

int no_Of_Cities = scannerObj.nextInt();

这将消耗包含您刚读取的int的行的结尾,并防止在您第一次调用String name = new String(scannerObj.nextLine());

时将该(空)行用作下一个输入

答案 1 :(得分:0)

String name = new String(scannerObj.nextLine());

此行导致问题,因为它导致输入跳到下一行,从而跳过城市0的输入。

使用此代码它将起作用 - : String name = new String(scannerObj.next());