2016-01-21 128 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); 
相关问题