2

这是关于图中深度优先搜索的代码。谁知道为什么在这段代码中使用了 bufferedReader 类?为什么不使用 nextInt 函数呢?它的特权是什么?是为了加快处理速度吗?谢谢 :)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Graph
{
int g[][];
int v,e;
int visited[];
void createGraph()throws IOException
{
    int a,b;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("\n Enter Number Of Vertices = ");
    v=Integer.parseInt(br.readLine());
    System.out.print("\n Enter Number Of Edges = ");
    e=Integer.parseInt(br.readLine());  
    g=new int[v+1][v+1];
    for(int i=1;i<=e;i++)
    {
        System.out.print("\n Enter Edge Infomation ");
        System.out.print("\n From =");
        a=Integer.parseInt(br.readLine());
        System.out.print("\n To =");
        b=Integer.parseInt(br.readLine());  
        g[a][b]=g[b][a]=1;
    }
}
void callDFS()
{
    visited = new int[v+1];
    dfs(1);
}   
void dfs(int k)
{
    System.out.print(k + "\t");
    visited[k]=1;
    for(int i=1;i<=v;i++)
    {
        if(g[k][i] !=0 && visited[i]!=1)
        dfs(i);
    }
}
}
class DFS
{
public static void main(String args[])throws IOException
{
    Graph g = new Graph();
    g.createGraph();
    g.callDFS();
}
}
4

3 回答 3

2

可能在编写此代码时,Scanner 类不存在(实际上 java 1.4 没有 Scanner 类),或者编写此代码的人可能只是更喜欢使用 BufferedReader 的 readLine 方法而不是使用 Scanner.nextLine() 方法,我看不到有关您的问题的其他解释

于 2013-01-12T11:13:48.507 回答
2

这是您打算如何使用流的问题。存在用于简单和线程化应用程序的缓冲读取器。这是由于扫描仪缺乏线程安全性。

我认为您将从Scanner vs. BufferedReader这个问题中获得更多信息

于 2013-01-14T09:54:03.403 回答
0

BufferedReader 更简单(这使得它更高效),但它也是一个更清晰的选择,表明您打算使用 BufferdReader 提供的功能。即readLine()是主要的。

简而言之,如果你BufferedReader知道它只会读取行。如果您使用Scanner它,则意味着您可能会或很多人不会阅读更复杂的内容。

顺便提一句:

  Integer.parseInt(br.readLine())

  scanner.nextInt();

不一样,尽管新手开发人员通常会忽略这种区别。出于这个原因,我更喜欢第一个例子。不同之处在于如何处理新行。

于 2013-01-12T11:29:52.520 回答