Witam. Dopiero zaczynam przygodę z java i mam takie dwa problemy. Potrzebuje pobrać dane z pliku znak po znaku tzn. bardziej chodzi mi o to że w pliku tekstowym mam jakaś funkcje np. y=2x+1 i potrzebuje pobrać dane w taki sposób żebym do jednej zmiennej przypisywał to co jest przy x a do drugiej pozostałą część w tym przypadku 1. Z wszelkie podpowiedzi będę wdzięczny. Pozdrawiam
Odczyt z pliku zrobiłbym w taki sposób:
String dane = "";
try {
BufferedReader odczytaj = new BufferedReader(new FileReader("xxx.txt"));
while((dane = odczytaj.readLine())!=null)
}
} catch (IOException e) {
system.out.println("Fail");
}
oczywiście jeżeli odczytywanie linia po linii będzie pasowało do pliku. A później sprawdzenie w pętli w poszukiwaniu danego znaku
for(int i = 0; i<dane.length(); i++){
if(dane.charAt(i) == 'x')
// działanie
}
import java.io.*;
public class Przyklad3_1
{
public static void main(String[] args)
{
String dane = "";
int parametr;
try {
BufferedReader odczytaj = new BufferedReader(new FileReader("c://plik.txt"));
while((dane = odczytaj.readLine())!=null);
for(int i = 0; i<dane.length(); i++){
if(dane.charAt(i)=='x'){ // działanie }
}
}
catch (IOException e) {
System.out.println("Fail");
}
}
}
Przy próbie uruchomienia dostaje taki komunikat:
Exception in thread "main" java.lang.NullPointerException
at Przyklad3_1.main(Przyklad3_1.java:16)
Napisz sensowna obsługę błędów. Takie coś:
catch (IOException e)
{
System.out.println(e);
}
to minimum.
Btw, formatuj kod.
Ostatnie pytanie. Mam ta cześć kod:
for(int i = 0; i<dane.length(); i++){
if(dane.charAt(i) == 'x')
}
i teraz jak zrobić aby do zmiennej np. a wpisać liczbę która znajduje się przed x. Czyli jeżeli mam 2*x to do zmiennej a żeby była wpisana cyfra 2? Z góry dziękuje za odpowiedz i proszę wyrozumiałość za (na pewno dla wszystkich) banalne pytania :)
rozumiem że w pliku znajduje się funkcja typu y = 5*x +2 bo jeżeli tak to łopatologicznie aby wydobyć liczbę 5 z równania można mejknąć tak:
int szukana = 0;
for(int i = 0; i<dane.length(); i++){
if(dane.charAt(i) == 'x')
szukana = dane..charAt(i-2);
}
ale to łopatologicznie zrobione :)
Jeśli wejście jest zawsze postaci y=ax+b (bez białych znaków), to wystarczy:
String line = reader.readLine();
String x = line.substring(2, line.indexOf('x');
String y = line.substring(line.indexOf('+') + 1);
dla dowolnej długości x i y.
@bo: zdaje sie juz ktorys raz widze u Ciebie linijke System.out.println(exc) - jest jakis konkretny powod dla ktorego nie lubisz exc.printStackTrace(), wzglednie exc.printStackTrace(System.out) (jesli nie lubisz wypisywania na System.err)?
Przecież napisałem
catch (IOException e)
{
System.out.println(e);
}
to minimum.
Efekty działania showStackTrace() nie odpowiadają mi estetycznie ;-), niekiedy nie byłem też w stanie zobaczyć na konsoli tego co interesujące. Na ogół używam swojej "funkcji globalnej":
public static void showStack(Throwable e,int howMany)
{
StackTraceElement[] stos=e.getStackTrace();
System.out.println(e.toString());
for (int i=0;i<howMany && i<stos.length;i++)
{
System.out.println(""+stos[i]);
}
}
Trudno ją polecać w przykładach na forum.
Nie ucinasz sobie w ten sposob stosu wywolan za duzo? Np., czy widzisz wszystkie root-wyjatki?
Zazwyczaj piszę showStack(ex,10); niekiedy showStack(ex,15); Nie przypominam sobie sytuacji by 15 za mało.