Program entropia

0

Witam czy pomógłby mi ktoś z dokończeniem programu do liczenia entropii w Java na razie mam tyle i nie wiem co dalej


import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class GrupaOchronaDanych 
{
    public static void main(String[] args) 
    {
        System.out.println("Program do liczenia entropii");
        String nazwaPlik;
        
        if(args.length ==0 )
           nazwaPlik = "domyślny.txt";
        else
            nazwaPlik=args[0];
        System.out.println("Nazwa zadanego pliku " + nazwaPlik);
        File plik = new File(nazwaPlik);
        
   
        try {
            BufferedReader bufor = new BufferedReader (new FileReader(plik));
         
            while(bufor.ready())
            {
                int kodZnaku = bufor.read();
                int ind=1;
                System.out.println(ind+"\t"+kodZnaku+"\t" + (char)kodZnaku);
            }
        } catch (Exception ex) {
           System.out.println("Wystapil wyjatek" + ex.toString());
        }
    }
   
}

0
danie6 napisał(a):

Witam czy pomógłby mi ktoś z dokończeniem programu do liczenia entropii w Java na razie mam tyle i nie wiem co dalej

Pętla czytania znaków powinna być zrobiona tak

int kodZnaku;
int ind = 1;

while(true)
{
kodZnak = bufor.read();
if(kodZnaku == -1)
{
break;
}
System.out.println(ind+"\t"+kodZnaku+"\t"+ (char)kodZnaku);
}

bufor.ready() to nie jest najlepszy pomysł.
Ta funkcja informuje czy są dane do odczytania w buforze, ale nie informuje od dotarciu do końca strumienia danych. W skrajnie złym przypadku może dojść do sytuacji w której bufor.ready() da stan false przed odczytaniem pliku do końca tylko dlatego, że system nie napełnił bufora przed wywołaniem tej funkcji. Ta funkcja wykona się natychmiast - zwróci stan i wyjdzie.

Funkcja read() na odwrót - jawnie informuje o końcu danych (zwraca wtedy -1) a program nie wyjdzie z tej funkcji o ile nie dostanie danych lub zostanie stwierdzony błąd (wyłapany blokiem try catch).

1 użytkowników online, w tym zalogowanych: 0, gości: 1