1

私は決勝に向けて勉強していて、次のことをやろうとしています:

ファイル nFile を開き、行番号 start から行番号 end に対応する文字列をファイル nameFile に出力します。

行番号の開始または終了が存在しない場合はエラー メッセージを処理する必要があり、IOException が発生した場合は文字列 "Line not found" を出力し、メソッドは "IO Error" を出力する必要があります。

次のテキストファイルを使用しています。

11 
1c20 
203 
G2 

2,4を入力すると「1c20 203 G2」。印刷されます

私は多くのことを調査しましたが、行番号が入力されたときに文字列を印刷することに固執しています。

import java.io.*;

public class files { 
public void dR(String nFile, int start, int finish)     
{
        try{                
               FileInputStream fstream = new FileInputStream("C://rest//dat.txt");

               // Get the object of DataInputStream
               DataInputStream in = new DataInputStream(fstream);
               BufferedReader br = new BufferedReader(new InputStreamReader(in));

               nameFile=null;
               start=0;
               finish=0;
                // if start  is greater or = to 1 and finish less than 4
                while((nFile=br.readLine())!=null && start>= 1 && finish <= 4)
                {
                     for(int i=0; i<=start; i++)
                     {
                         System.out.println(nFile);
                         br.close();
                     }
                     System.out.println("that doesnt exsist"); 
                  }            
      } 
            catch(IOException e)
            {
                 System.out.println("there is an IO error");                
            }
        }
    }
4

4 に答える 4

4

パラメータから取得したすべての入力を破棄しています

int linenb=1;//this will hold the current line number
while((nFile=br.readLine())!=null){
    if(linenb>=start&&linenb<=finish)  
        System.out.println(nfile); 
    linenb++;
}
if(linenb<=finish)
    System.out.println("Line not found"); 

また、終了を行う最終ブロックを追加します

于 2012-04-23T20:25:03.070 に答える
1

このようなもの?

for (int i=1 ; (nFile=br.readLine())!=null; i++) 
{
 if (start>= i && finish <= i)
 {
  System.out.println(nFile);
 }
}
br.close();
于 2012-04-23T20:24:35.347 に答える
0

さて、まず第一に、あなたはnFileパラメータを使用していません(ヒント:それはファイル名です。それがあなたのコードのどこにあるべきかを推測してください...)そしてこれらの2行で:

start=0;
finish=0;

与えられたパラメータを失っただけです。

代わりに、新しい変数を作成します

int index = 0;

新しい行ごとにインクリメントし、開始と終了の間にある場合は、行を印刷します。

start現在の行を数えるには、前の行を「読み取る」必要があります。

于 2012-04-23T20:24:02.767 に答える
0
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class printStrings
{
    public static void main (String[] args)
    {
        Scanner in = new Scanner (System.in);

        int start = in.nextInt ();
        int stop = in.nextInt ();

        ArrayList<String> strings = new ArrayList<String> ();
        String line = null;
        BufferedReader buff = null;
        try
        {
            buff = new BufferedReader (new InputStreamReader (new FileInputStream ("data.txt")));
            while ((line = buff.readLine ()) != null)
            {
                strings.add (line);
            }
        }
        catch (Exception e)
        {
            System.err.println ("IO Error");
            System.exit (-1);
        }
        finally
        {
            try
            {
                buff.close ();
            }
            catch (IOException e2) {}
        }

        if (start < 1 || start > strings.size () || stop < 1 || stop > strings.size () || start > stop)
        {
            System.err.println ("Line not found");
            System.exit (-2);
        }

        for (int i = start - 1; i < stop; i++)
        {
            System.out.println (strings.get (i));
        }
    }
}
于 2012-04-23T20:39:23.973 に答える