2016-01-21 157 views
0

在我的java項目中,我將讀取一個csv文件。如果文件包含值爲10的「nr」,我想在屏幕上打印「名稱」。在循環中使用外部變量

while ((line = reader.readLine()) != null) { 
    scanner = new Scanner(line); 
    scanner.useDelimiter(";"); 
    while (scanner.hasNext()) { 
     String data = scanner.next(); 
     if (index == 0) 
      nr = Integer.parseInt(data); 
      if (nr == 10){ 
       // ????? 
      } 
     else if (index == 1) 
      name = data; 
     else if (index == 2) 
      id = data; 
     else 
      System.out.println("invalid data::" + data); 
     index++; 
    } 
    index = 0; 
    forward(nr, name, id); 
} 

例如我的CSV是有「NR」 10,兩次:

10;name1;id1 
20;name2;id2 
10;name3;id3 

所以我想在屏幕上打印姓名1和NAME3,我該如何使用while循環之外這些變量?

+0

'name'如果'nr'是* 10 *,那麼你需要在'else if(index == 1)'塊中做到這一點。 – Tom

+0

奧克,但它是一個巨大的CSV文件,所以它可以安全地使用這些名稱,並在以後的一個簡單的打印聲明中打印出來? –

+1

請勿損壞您的帖子 –

回答

1

我不是Java程序員,但是如果我已經正確地理解了這個問題,則可以在While循環的範圍之外定義一個變量並從內部指定它。見下文。

N.B.在Java中,變量只能在聲明的範圍內使用。

ArrayList<String> list = new ArrayList<String>(); 
while (...) { 
    list.add("NameToAdd"); 
} 
for(String name: list){ 
    System.out.print(name); 
}; 
+0

我不確定爲什麼這會被拒絕投票,因爲我在關於範圍的假設中正確? –

+0

我不是選民之一,但我猜他們和我一樣犯了同樣的錯誤,你寫了「你不行嗎?」,但我讀了「你不行」,這就是我寫的原因。 「哦,順便說一句:關於答案的一件大事就是:他們應該回答這個問題,即使你給OP一個很好的方向來解決這個問題,它是一個」請嘗試「的請求,這屬於評論。你能否通過刪除問題和通過更新你的問題添加一個小例子,他的代碼應該是什麼樣子?這將是一個很好的答案。 – Tom

+0

但請注意,這可能不會影響降價,因爲選民沒有通知有關答案的更新,所以他們沒有看到更新的答案。 – Tom

0

在java中變量不能在範圍外使用他們哪裏定義(不像的Javascript例如)

所以,你有兩個選擇將它們存儲在循環之外定義的變量,或打印他們在你獲得他們的那一刻,而不是使用name1和name3變量。

0

您可以根據您的要求修改的輸入值,這裏我使用Arralist數據:

public static void main(String s[]) { 

    String name = "", id = ""; 
    ArrayList<String> nameList = new ArrayList<String>(); 
    nameList.add("10;name1;id1"); 
    nameList.add("20;name2;id2"); 
    nameList.add("10;name3;id3"); 
    nameList.add("30;name4;id4"); 
    nameList.add("10;name5;id5"); 
    nameList.add("10;name6;id6"); 

    int index = 0; 
    int nr; 

    for (String line : nameList) { 
     Scanner scanner = new Scanner(line); 
     scanner.useDelimiter(";"); 
     index = 0; 
     while (scanner.hasNext()) { 
      String data = scanner.next(); 
      //System.out.println(":: " + data + " Index:: " + index); 

      if (index == 0) { 
       nr = Integer.parseInt(data); 
       index++; 
       if (nr == 10) { 
        name = scanner.next(); 
        id = scanner.next(); 
        System.out.println(nr + ";" + name + ";" + id); 
       } 
      } 

     } 

    } 
} 
0

像湯姆提到你可以做一些像以前一樣:如果你要打印的

String str = ""; 
int nr = 0; 
int index = 0; 
while ((line = reader.readLine()) != null) { 
    scanner = new Scanner(line); 
    scanner.useDelimiter(";"); 
    while (scanner.hasNext()) { 
     String data = scanner.next(); 
     if (index == 0) 
      nr = Integer.parseInt(data); 
     else if (index == 1) 
      name = data; 
      if (nr == 10) 
       str += data + "\n" 
     else if (index == 2) 
      id = data; 
     else 
      System.out.println("invalid data::" + data); 
     index++; 
    } 
    index = 0; 
    forward(nr, name, id); 
} 
System.out.println(str);