2013-07-25 5 views
1

나는 113 개의 라인을 가진 lol.txt의 임의의 라인이 선택되어 메시지 박스로 보내지는 방법을 만들고있다. 그것이 작동하는 방법 :파일에서 임의의 라인 선택

  1. 가 for 루프는 라인의 임의의 숫자
  2. 출력 메시지 상자

으로 무작위로 생성 된 라인을 넘어 가야한다 0

  • (112)까지의 난수를 생성 내 경우에는 2 단계가 작동하지 않아 누군가가 그걸 제안 할 수 있기를 바랍니다. 당신이 나에게 괜찮 배열 목록과 솔루션을 보내려면

    public void close(){ 
        try{ 
         Random random = new Random(); 
         int randomInt = random.nextInt(112); 
         FileReader fr = new FileReader("lol.txt"); 
         BufferedReader reader = new BufferedReader(fr); 
         String line = reader.readLine(); 
         Scanner scan = null; 
         for (int i = 0; i < randomInt + 1; i++) { 
          scan = new Scanner(line); 
          line = scan.nextLine(); 
         } 
         JOptionPane.showMessageDialog(null,line); 
        }catch (IOException e){ 
         JOptionPane.showMessageDialog(null,e.getMessage()+" for lol.txt","File Error",JOptionPane.ERROR_MESSAGE); 
        } 
    } 
    

    하지만 난 처음에 계획 어떻게이 될 것 정말 좋아 다음은 코드입니다.

  • +0

    출력물을 보여줄 수 있습니까? 매번 똑같은가요? 감사. –

    +0

    파일에서 정확히 한 줄을 읽습니다. 첫번째. 어떻게 작동하리라고 기대합니까? –

    +0

    '스캐너'가 필요하지 않습니다. 제거하면 코드가 더 잘 작동합니다. – andy256

    답변

    2

    첫 번째 행만 읽었으므로 첫 번째 행만 가져 오는 것입니다. 이 시도 ..

    String line = reader.readLine(); 
    for (int i = 0; i < randomInt + 1; i++) { 
        line = reader.readLine(); 
    } 
    

    당신이 루프의 각 반복을 가진 새로운 Scanner를 만든 다음 line

    4

    로 다시 읽어 그 라인을 사용하여 파일에서 라인을 읽고하고있는 그것은 사용하는 것이 가장 좋습니다 이 목적을위한 목록뿐만 아니라 임의 크기를 동적으로 만들어 파일 크기에 맞 춥니 다. 코드를 변경하지 않고도 선을 더 추가하고자 할 경우

    BufferedReader reader = new BufferedReader(new FileReader("lol.txt")); 
    String line = reader.readLine(); 
    List<String> lines = new ArrayList<String>(); 
    while (line != null) { 
        lines.add(line); 
        line = reader.readLine(); 
    } 
    Random r = new Random(); 
    String randomLine = lines.get(r.nextInt(lines.size())); 
    JOptionPane.showMessageDialog(null,randomLine);