Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Java Sorularım (Takıldıkça Soru Eklenecek)


Buddha

Öne çıkan mesajlar

abschluss 1

Aufgabenstellung

In dieser Abschlussaufgabe sollen Sie ein Programm schreiben, das in der Lage ist, Boolesche Formeln (in GbI "aussagenlogische Formeln" genannt) darzustellen und einfache Operationen auf ihnen auszuführen.
Boolesche Formeln

Im Rahmen dieser Aufgabe werden wir Boolesche Formeln betrachten, die folgende Struktur haben. Unsere Formeln bestehen aus den Werten true / false, Variablen, dem logischen Und sowie dem logischen Oder und der Negation:

Werte: true und false

Variablen: Eine beliebige Anzahl von Variablen mit den Namen vi. Dabei ist i die Nummer der Variable. Diese Nummern müssen nicht fortlaufend sein, sollen aber im Bereich ? 0 und < Integer.MAX_VALUE liegen.

Negation: Eine bestehende Boolesche Formel f kann zu der Booleschen Formel (not f) erweitert werden, welche die Negation von f darstellt.

Logisches Und (Konjunktion): Zwei bestehende Boolesche Formeln f1, f2 können mit and verknüpft werden: (f1 and f2) ist wieder eine Boolesche Formel.

Logisches Oder (Disjunktion): Zwei bestehende Boolesche Formeln f1, f2 können mit or verknüpft werden: (f1 or f2) ist wieder eine Boolesche Formel.

Hinweise:

Abgesehen von not, and und or muss Ihr Programm keine weiteren Operatoren unterstützen - es sollte aber so aufgebaut sein, dass sich diese leicht einbauen lassen.

Achten Sie auf die Klammerung! Es sollen keine Klammern weggelassen werden, auch keine äußeren Klammern!

Beispiele

true ist eine Boolesche Formel.

v3 ist eine Boolesche Formel.

(not true) ist eine Boolesche Formel.

((v1 or v2) and (not v3)) ist eine Boolesche Formel, denn:

v1, v2 und v3 sind Variablen und damit Boolesche Formeln.

Demnach sind auch (v1 or v2) und (not v3) Boolesche Formeln.

Da (v1 or v2) und (not v3) Boolesche Formeln sind, ist auch ((v1 or v2) and (not v3)) eine Boolesche Formel



Weder or (v3 and true) noch (not) sind Boolesche Formeln.

Operationen auf Booleschen Formeln

Im Rahmen dieser Aufgabe sollen Sie zwei rekursiv definierte Operationen auf Boolesche Formeln implementieren: Das Ersetzen (Substitution) von Variablen durch Formeln und das Vereinfachen von bestehenden Formeln.
Ersetzen / Substitution

Sind f und g zwei Boolesche Formeln und vi eine Variable, so bezeichnet f' = f [g/vi] diejenige Boolesche Formel, die aus f dadurch hervorgeht, dass jedes Vorkommen von vi in f durch g ersetzt wird. Beachten Sie dabei, dass Vorkommen von vi in g nicht ersetzt werden. Die Operation f [g/vi] ist wie folgt definiert:

vj [g/vi] › vj

Variablen vj mit j ? i werden nicht ersetzt. Gleiches gilt für Werte.
vi [g/vi] › g

Die Variable vi wird durch g ersetzt.
(not f1) [g/vi] › (not f1 [g/vi])

Bei einer Negation wird die Substitution zunächst in der negierten Formel durchgeführt und das Ergebnis anschließend wieder negiert.
( f1 and f2 ) [g/vi] › ( f1 [g/vi] and f2 [g/vi] )

Bei einer Konjunktion wird die Substitution zunächst auf den beiden Teilformeln durchgeführt und die Ergebnisse anschließend mit and verknüpft.
( f1 or f2 ) [g/vi] › ( f1 [g/vi] or f2 [g/vi] )

Eine Disjunktion wird analog zur Konjunktion behandelt.

Durch rekursives Anwenden dieser Regeln lassen sich alle Vorkommen von vi in f durch g ersetzen.
Vereinfachen

Bei dieser Operation geht es darum, eine Boolesche Formel mit Hilfe bestimmter Regeln in eine andere Boolesche Formel von einfacherer Gestalt zu verwandeln, die aber äquivalent ist, d.h. bei jeder Belegung der in ihr vorkommenden Variablen zum selben Wahrheitswert auswertet. Hierzu werden Teilformeln eliminiert, die unabhängig von den Belegungen der Variablen immer zu true bzw. false auswerten. Beispielsweise kann ((v1 or (not v1)) and v2) zu v2 vereinfacht werden, da (v1 and (not v1)) für jede Belegung von v1 immer zu false auswertet und (false or v2) für jede Belegung von v2 zum selben Wahrheitswert auswertet wie v2. Insgesamt sollen (genau) die folgenden Regeln angewendet werden:

Variablen und Werte:

Variablen und Werte werden stets zu sich selbst vereinfacht.
Negation:
(not false) › true
(not true) › false
(not (not f)) › f

Negierte Werte werden ausgewertet und eine doppelte Negation wird entfernt.
Konjunktion:
(f and true) › f
(true and f) › f
(f and false) › false
(false and f) › false
(f and (not f)) › false
((not f) and f) › false
(f and f) › f

Konjunktionen mit true werden weggelassen, Konjunktionen mit false werden immer zu false vereinfacht. Die Konjunktion einer Formel mit ihrer Negation wird zu false vereinfacht. Eine Konjunktion von zwei identischen Formeln f ist äquivalent zu f selbst und wird daher zu f vereinfacht.
Disjunktion:
(f or false) › f
(false or f) › f
(f or true) › true
(true or f) › true
(f or (not f)) › true
((not f) or f) › true
(f or f) › f

Disjunktionen mit false werden weggelassen, Disjuktionen mit true werden immer zu true vereinfacht. Die Disjunktion einer Formel mit ihrer Negation wird zu true vereinfacht. Eine Disjunktion von zwei identischen Formeln f ist äquivalent zu f selbst und wird daher zu f vereinfacht.

Hinweise:

Die Anwendung der Vereinfachungsregeln erfolgt rekursiv. Solange die vorliegende Formel weder ein Wert noch eine Variable ist, also noch weitere Teilformeln enthält, wenden sie die Vereinfachungsregeln zuerst auf die Teilformeln an, bevor sie die Formel selbst vereinfachen.

Beispiel: Die Formel (v1 and (v2 or (not v2))) wird vereinfacht, indem zunächst die Teilformeln v1 und (v2 or ((not v2))) vereinfacht werden. v1 ist schon vereinfacht und (v2 or ((not v2))) kann mittels der Regel (f or (not f)) › true zu true vereinfacht werden. Auf die so entstandene Formel (v1 and true) kann nun die Regel (f and true) › f angewendet werden, wodurch sie zu v1 vereinfacht wird. Insgesamt wird also (v1 and (v2 or ((not v2)))) zu v1 vereinfacht.
Formeln werden hier rein syntaktisch behandelt. Bei der Prüfung zweier Formeln auf Gleichheit dürfen Sie also keinerlei Eigenschaften der Operatoren not, and oder or ausnutzen. Beispielsweise sind (f1 and f2) und (f2 and f1) nicht gleich und auch (f1 or (f2 or f3)) und ((f1 or f2) or f3) sind verschieden.

Die Kommandoschnittstelle

Sie sollen auch eine Kommandoschnittstelle implementieren. Mit dieser soll man Boolesche Formeln schrittweise aufbauen, vereinfachen und substituieren können. Um auch komplexe Formeln aufbauen zu können, soll Ihr Programm einen Formelspeicher für bereits zusammengesetzte Formeln verwalten. Mit Hilfe von diesem sollen bereits gebaute Formeln über Referenzen auf Ihren Index im Formelspeicher angesprochen werden können. Wird dann in einem Befehl eine solche Referenz verwendet, so soll für diese Referenz die referenzierte Formel eingesetzt werden. Referenznummern beginnen immer mit 0 und werden aufsteigend vergeben.

Beispiel:

bool> not v1
#0 = (not v1)
bool> and #0 v1
#1 = ((not v1) and v1)

Mit dem ersten Befehl wird die Formel (not v1) definiert. Die Ausgabe deutet an, dass sich diese Formel nun über die Referenz #0 ansprechen lässt. Im nächsten Befehl wird mit dann die Konjunktion der ersten Formel mit v1 gebildet, die im Folgenden über die Referenz #1 angesprochen werden kann. Beachten Sie auch: Variablen und Werte können immer direkt verwendet werden.


Formate der Ein- und Ausgaben

Werte sind entweder true oder false.
Variablen (im Folgenden durch dargestellt) haben das Format v, wobei eine Zahl ? 0 und < Integer.MAX_VALUE ist.
Referenzen (im Folgenden durch dargestellt) haben das Format #, wobei eine ? 0 und < Integer.MAX_VALUE ist.
Eine atomare Formel (im Folgenden durch , , etc. dargestellt) kann ein Wert, eine Variable oder eine Referenz sein.

Klammerung: Konjunktionen und Disjunktionen werden eingeklammert. Auch die äußersten Klammern werden nicht weggelassen. Negationen, Variablen und Werte hingegen werden nicht geklammert.



Wird durch Eingabe eines entsprechenden Befehls dem Formelspeicher eine Formel hinzugefügt oder eine Formel aus dem Formelspeicher angezeigt (siehe Befehle list und show), so wird diese Formel mit ihrer Referenz im Format

=

ausgegeben. Dabei ist vollständig aufgelöst, d.h. dort sind keine Referenzen enthalten.



Fehlermeldungen haben die Gestalt "Error! ", wobei ein sinnvoll gewählter Fehlerbeschreibungstext ist. Fehlermeldungen enthalten keine Zeilenumbrüche.

ACHTUNG: Da wir automatische Tests dieser Schnittstelle machen, müssen die Ausgaben Ihrer Shell exakt den Vorgaben entsprechen. Insbesondere sollen sowohl Klein- und Grossbuchstaben als auch die Leerzeichen und Zeilenumbrüche genau übereinstimmen. Geben Sie auch keine zusätzlichen Informationen aus. Beginnen Sie frühzeitig mit dem Einreichen, um Ihre Lösung dahingehend zu testen, und verwenden Sie das Forum, um eventuelle Unklarheiten zu klären.
Befehle

Der Prompt der Shell ist "bool> ".

Ihre Shell muss mindestens folgende Befehle kennen:

not

Fügt die Negation von zum Formelspeicher hinzu.
and

Fügt die Konjunktion von und zum Formelspeicher hinzu.
or

Fügt die Disjunktion von und zum Formelspeicher hinzu.
show

Gibt die durch referenzierte Formel aus.
list

Listet die Formeln im Formelspeicher zeilenweise und aufsteigend nach Referenznummer sortiert auf.
simplify

Berechnet die vereinfachte Version der referenzierten Formel und fügt das Ergebnis dem Formelspeicher als neue Formel hinzu.
subst

Berechnet die Formel, die aus der durch referenzierten Formel dadurch hervorgeht, dass alle Vorkommen von durch die von beschriebene Formel ersetzt werden. Ist eine Variable oder ein Wert, so wird direkt durch ersetzt. Ist eine Referenz, wird diese vor der Ersetzung zu der entsprechenden Formel aus dem Formelspeicher aufgelöst.
Das Ergebnis des Ersetzungsprozesses wird dem Formelspeicher als neue Formel hinzugefügt.
quit

Beendet das Programm.

Verhalten der Shell

Hat ein Parameter das falsche Format oder erfüllt er eine zur erfolgreichen Ausführung eines Befehls erforderliche Bedingung nicht, so ist stets eine Fehlermeldung auszugeben. Beispielsweise soll eine Fehlermeldung ausgegeben werden, wenn der Benutzer eine nicht vergebene Referenz angibt.

Tritt ein Fehler auf, soll der Zustand des Programms derselbe sein, als wäre der zum Fehler führende Befehl nicht abgesetzt worden.

Ablaufbeispiele
Beispiel 1:

bool> and v1 v2
#0 = (v1 and v2)
bool> or #0 false
#1 = ((v1 and v2) or false)
bool> simplify #1
#2 = (v1 and v2)
bool> show #1
#1 = ((v1 and v2) or false)
bool> not v3
#3 = (not v3)
bool> subst #1 v2 #3
#4 = ((v1 and (not v3)) or false)
bool> subst #4 v1 true
#5 = ((true and (not v3)) or false)
bool> simplify #5
#6 = (not v3)
bool> list
#0 = (v1 and v2)
#1 = ((v1 and v2) or false)
#2 = (v1 and v2)
#3 = (not v3)
#4 = ((v1 and (not v3)) or false)
#5 = ((true and (not v3)) or false)
#6 = (not v3)
bool> quit

Beispiel 2:

bool> not v1
#0 = (not v1)
bool> or #0 v2
#1 = ((not v1) or v2)
bool> not v2
#2 = (not v2)
bool> or v1 #2
#3 = (v1 or (not v2))
bool> and #1 #3
#4 = (((not v1) or v2) and (v1 or (not v2)))
bool> subst #5 v1 false
Error! First argument: Invalid reference!
bool> subst #4 v1 false
#5 = (((not false) or v2) and (false or (not v2)))
bool> subst #4 v1 true
#6 = (((not true) or v2) and (true or (not v2)))
bool> simplify #5
#7 = (not v2)
bool> simplify #6
#8 = v2
bool> quit

Allgemeine Hinweise zur Implementierung

Modellieren Sie eine passende Datenstruktur für Formeln. Beachten Sie dabei, dass Formeln eine Baumstruktur haben, in der jedes Element entweder kein (Werte und Variablen), ein (Negation) oder zwei (Konjunktion und Disjunktion) Kind(er) hat. Die Blätter des Formelbaums bestehen somit ausschließlich aus Werten und Variablen.

Mehr über Bäume in Java erfahren Sie z.B. im Kapitel "Bäume" aus dem Buch "Programmieren lernen" von P.Pepper. Das Buch ist im Springer-Verlag erschienen und kann daher aus dem KIT-Netz (bzw. über VPN) kostenlos (zum persönlichen Gebrauch) unter SpringerLink im PDF- Format heruntergeladen werden.
Einmal erstellte Formelobjekte sollten nicht mehr veränderbar sein. Jede Operation, die eine bestehende Formel transformiert (Substitution, Vereinfachung), sollte eine neue Formel erzeugen.

Abgabe der Lösung im Praktomat

Reichen Sie bei der Abgabe Ihrer Lösung in jedem Fall folgende Dateien mit ein:

Eine Datei Shell.java, die die main-Methode enthält.
Eine Datei Tests.txt, die eigene Testfälle enthält. Dokumentieren Sie die Testfälle in Form von Programmabläufen, wie im obigen Beispiel.

Beachten Sie: Geben Sie keine weitere Klasse ab, die eine main-Methode enthält!

Achten Sie bei der Bearbeitung dieser Abschlussaufgabe auf

korrekte Java (1.7)-Syntax
Einhaltung der Java Code Conventions
Einrückungen
Einhaltung vorgegebener Schnittstellen
Umsetzung des Geheimnisprinzips
ausführliche Dokumentation des Quelltextes
adäquates Verhalten öffentlicher Methoden bei ungültigen Parametern
sinnvolle Modellierung der Klassenstruktur

Hinweis zur Benutzung der Klasse Terminal: Wenn Sie für Ihre Abgabe die Klasse Terminal benutzen, dann reichen Sie diese auf keinen Fall mit ein! Praktomat stellt die Klasse im Package ipd bereit. Wenn Sie bei sich lokal die Klasse ebenfalls im package ipd benutzen (d.h. mit package-Anweisung, Klasse im Ordner ipd, in benutzenden Klassen korrekt importiert), dann sollte es keine Probleme bereiten, wenn Sie die Klasse nicht mit hochladen.

Praktomat wird für diese Abschlussaufgabe folgende automatische Prüfungen auf Ihren Lösungen ausführen. Fett markierte Prüfungen müssen bestanden werden, damit die Lösung eingereicht werden kann:

Maximale Zeilenbreite: 120 Zeichen
Übersetzen (Java 1.7)
Checkstyle WS: Überprüfen korrekter Whitespace-Setzung
Checkstyle JCC 1: Überprüft, ob Namenskonventionen eingehalten wurden und ob die eingereichten Klassen mit Javadoc-Kommentaren versehen wurden.
Checkstyle JCC 2: Überprüft erweiterte Konventionen, zum Beispiel ob Utility-Klassen nicht instantiiert werden können
Funktionalitätstest: Testet die Funktionalität Ihres Programmes.
Einfache Tests: Testet die Ablaufbeispiele.
Erweiterte Tests: Schwierigere und umfassendere Tests.

Unabhängig von den Tests, die Praktomat auf Ihrer Abgabe dürchführt, sollten Sie Ihre Lösung vor Abgabe selbst ausgiebig testen! Hierzu gibt es zum Beispiel das Test-Framework JUnit, das auch von Entwicklungsumgebungen wie Eclipse oder NetBeans unterstützt wird, siehe dazu auch hier bzw. hier. Informationen über Checkstyle finden Sie unter http://checkstyle.sourceforge.net/.
Bewertung Ihrer Abgabe

Sowohl diese als auch die zweite Abschlussaufgabe werden jeweils in den Kategorien Funktionalität und Programmiermethodik mit einer Punktezahl von 7 bis 0 bewertet. Zum Bestehen der Abschlussaufgaben müssen

beide Aufgaben erfolgreich in Praktomat eingereicht sein (d.h. die oben fett markierten Prüfungen müssen bestanden werden) und
der Durchschnitt über beide Aufgaben in Funktionalität besser oder gleich 4 Punkte sein und
der Durchschnitt über beide Aufgaben in Programmiermethodik besser oder gleich 4 Punkte sein.

Bei der Berechnung der Endnote werden die Punkte in Funktionalität doppelt gewichtet.

Bei Abschreiben werden beide Abschlussaufgaben mit nicht bestanden bewertet. Auch dann, wenn nur eine der Aufgaben abgeschrieben wurde.

Beispiel 1:

Aufgabe 1: Funktionalität: 7, Programmiermethodik: 5
Aufgabe 2: Funktionalität: 5, Programmiermethodik: 3

Es gilt also für den Durchschnitt: Funktionalität: 6, Programmiermethodik: 4 ? Bestanden!

Beispiel 2:

Aufgabe 1: Funktionalität: 7, Programmiermethodik: 3
Aufgabe 2: Funktionalität: 7, Programmiermethodik: 4

Es gilt also für den Durchschnitt: Funktionalität: 7, Programmiermethodik: 3,5 ? Nicht bestanden!

Beispiel 3:

Aufgabe 1: Funktionalität: 5, Programmiermethodik: 1
Aufgabe 2: Funktionalität: 6, Programmiermethodik: 3

Es gilt also für den Durchschnitt: Funktionalität: 5,5, Programmiermethodik: 2 ? Nicht bestanden!

Beispiel 4:

Aufgabe 1: Funktionalität: 6, Programmiermethodik: 7
Aufgabe 2: Funktionalität: 7, Programmiermethodik: 2

Es gilt also für den Durchschnitt: Funktionalität: 6,5, Programmiermethodik: 4,5 ? Bestanden!

Link to comment
Sosyal ağlarda paylaş

örnek üzerinden gidiyim


olay şu v1 true yada false olabilicek bi variable
ona göre mesela v1 yada true yazdıgında
v1 or true bunu direk v1 olarak simplifylıyabiliyo filan
1 1
0 1

bool> not v1 ilk inputu giriyoruz not v1
#0 = (not v1) #0 olarak onu kaydediyo
bool> or #0 v2 #0 or v2 diyoruz onu da #1 olarak atıyo
#1 = ((not v1) or v2)
bool> not v2
#2 = (not v2)
bool> or v1 #2
#3 = (v1 or (not v2))
bool> and #1 #3
#4 = (((not v1) or v2) and (v1 or (not v2)))
bool> subst #5 v1 false
Error! First argument: Invalid reference!
bool> subst #4 v1 false
#5 = (((not false) or v2) and (false or (not v2)))
bool> subst #4 v1 true
#6 = (((not true) or v2) and (true or (not v2)))
bool> simplify #5
#7 = (not v2)
bool> simplify #6
#8 = v2
bool> quit
Link to comment
Sosyal ağlarda paylaş

libraryler icin bir repository acip ana release surumlerini ayri ayri saklayabilirsin, en azindan yillardir bir seyleri update cart curt yaparken genel sekli bu benim gordugum

booelan geyiginde agac kullanin dedigi sey expressionu parselarken sanirim ?
sonucu uretirken de kullandirtabilirsin de n. sonucu listeye ekleyip sonradan kullanmak disinda pratikte ne olayi olabilir anlamadim

ha maksat sekil dursun ise yeni expressioni bir yaprak olarak uretirsin
ondan direk false yaptiklarin ondan dallanir
daha kompleks expression varsa degerine bakmadan yeni dal olabilir
v1 or true'ya ise yeni yaprak acmak yerine her dala erisim icin key+entry no list olur tek key+entryno yerine

az daha dusunsem atilabilecek baska taklalar bulabilriim, agac kullanin tabiri cok genel sanki
Link to comment
Sosyal ağlarda paylaş

genel olarak repository sart sanki
su anda tek bir devasa dosyada biseyler yapiyorum ben ve ona ragmen eksigini cekiyorum hani

dedigin sey tipik 1.4 surumu 1.5 surumu iste
eski surumleri tutmanin en guzel yolu bu

ha sorun webservice 1.4 interface 1.3 e gore ise calismasini nasil saglarim ise o daha farkli bir sey sanki
Link to comment
Sosyal ağlarda paylaş

Apache Poi ile excele yazdigim bilgileri (tabela) .SVG formatina cevirmek istiyorum.

http://www.svgmaker.com/ soyle bir add-in buldum ama bir turlu istedigim cozunurlukte cevirmiyor. Tabelayi kucultuyor falan.

Oysa tabela cok genis diye .SVG almak istiyorum. Cozunurlukten kaybetmeden tabela uzerinde hareket edebileyim yani.




Bunun baska yolunu bilen var mi ?
Link to comment
Sosyal ağlarda paylaş

  • 5 hafta sonra ...
oha tam da apache poi ile ilgili bişi sormaya gelmiştim.

Şimdi xlsx datası çekmek istiyorum, en mantıklı yol apache poi gibi duruyor, ama bu meret normal jarlardan farklı bişi gibi ( heh )

şimdi ben bununla halletsem işimi, başkalarına bu progamı gönderdiğimde apache kurmaları gerekir mi?
Link to comment
Sosyal ağlarda paylaş

Suark said:

oha tam da apache poi ile ilgili bişi sormaya gelmiştim.

Şimdi xlsx datası çekmek istiyorum, en mantıklı yol apache poi gibi duruyor, ama bu meret normal jarlardan farklı bişi gibi ( heh )

şimdi ben bununla halletsem işimi, başkalarına bu progamı gönderdiğimde apache kurmaları gerekir mi?


apache poi jarlarini da gonderecegin executable jar icine eklersen sorun cikmaz
Link to comment
Sosyal ağlarda paylaş

stack overflowa sordum buraya da sorayım
çok basit bi işim var,
apache poi ile xlsx datası okumam lazım.

WorkBook'a atayabiliyorum dosyayı ama içinde ki worksheeti SXSSFSHeet e atayamıyorum.

sıkıntılı kısım şu :

kod

SXSSFRow DummyRow;
SXSSFCell DummyCell;

int RowCount;
OPCPackage pkg = OPCPackage.open(blabla string adress);

XSSFWorkbook wb = new XSSFWorkbook(pkg);
Workbook MainBook = new SXSSFWorkbook(wb,100);

int a = MainBook.getNumberOfSheets();

SXSSFSheet MainSheet= (SXSSFSheet) MainBook.getSheetAt(0);


RowCount = MainSheet.getLastRowNum();


orada ki getnumberofsheets doğru döndürüyor ( 1-2 kere değiştirip denedim ) ama getSheetat veya getSheet işlemiyor.
nerde hata yapıyorum?
Link to comment
Sosyal ağlarda paylaş

Suark said:

ooo aklıma gelmemiş düzeltiyorum,

sheet e null döndürmüyor, getsheetname dedim, aynen ismini yazdı. Rowlara erişemiyorum o zaman hmm


şunu dener misin:

SXSSFSheet MainSheet= (SXSSFSheet) MainBook.getSheetAt(0);

yerine,

XSSFSheet mainsheet = (XSSFSheet) MainBook.getSheetAt(0);
Link to comment
Sosyal ağlarda paylaş

tmm denerim ama sheete yazdırıyor null gelmiyor, baya alıyorum sheeti. Rowu null döndürüyor

eveet sanırım dediğin olacak ama bi kaç şeyi daha değiştirmem lazım

http://stackoverflow.com/questions/12513981/reading-data-from-xlsx-sxssfsheet-with-apache-poi-java

adam yapaman onla anca yazarsın panpa demiş.
sdsfsds


vuuuu bingo

teşekkürler uk
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...