2013-01-12 26 views
2

這是一個關於圖表中深度優先搜索的代碼。 誰知道爲什麼在此代碼中使用了bufferedReader類? 和爲什麼不使用nextInt函數? 它有什麼特權? 是爲了加快處理速度嗎? 謝謝:)BufferedReader與掃描器相比有什麼好處

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(); 
} 
} 
+2

所以被檢測到無效的整數? – fge

+1

你爲什麼問這裏?爲什麼不問問這個人呢?你得到的所有東西都是猜測,例如,作者可能不知道Scanner,或者當時沒有它,或者不在意,或者由於許多可能的原因而喜歡BufferedReader如@ fge's。不建設性。 – EJP

+0

@EJP你可以把它當作「BufferedReader對掃描器有什麼好處 –

回答

2

這是您打算如何使用流的問題。緩衝讀取器存在簡單和線程化的應用程序。這是由於掃描儀缺乏線程安全性。

我想你會得到更多的關於這個從這個問題Scanner vs. BufferedReader

2

也許,當這個代碼的編寫,掃描儀類不存在(實際上Java 1.4中沒有Scanner類),或者也許誰寫了這個代碼簡單地使用BufferedReader中的首選的readLine方法,而不是使用Scanner.nextLine()方法,我不能看到其他關於你的問題的解釋

+0

嗨Harlandarka 你的意思是它也可以與掃描儀的方法一起使用嗎? – Shr723

+0

@ Shr723掃描儀也可以工作(除了默認情況下它也接受空格作爲分隔符,而前者需要換行符) –

+0

我不是故意的與掃描儀方法一起工作,我的意思是它**將絕對**與Scanner.nextLine方法一起工作,因爲它需要用戶輸入從行開始到行結束(\ r,\ n或兩者) – BackSlash

0

BufferedReader更簡單(這使得它稍微更有效),但它也是一個更明確的選擇,表明你打算做的是使用BufferdReader提供的功能。即readLine()是主要的。

總之,如果你有BufferedReader你知道它只是讀線。如果你使用Scanner這意味着你可能或許不會讀更復雜的東西。

BTW:

Integer.parseInt(br.readLine()) 

scanner.nextInt(); 

是不一樣的,雖然區別通常是失去了小白的開發。出於這個原因,我更喜歡第一個例子。不同之處在於如何處理新行。

+3

如果您使用Scanner.nextLine(),您的操作與BufferedReader.readLine()相同 – BackSlash

相關問題