Skip to content
Snippets Groups Projects
Commit e1e5edb6 authored by jez04's avatar jez04
Browse files

feat: :tada: solution

parent aa4c60b5
Branches
No related merge requests found
package cz.vsb.fei.lab;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import lombok.extern.log4j.Log4j2;
......@@ -16,57 +24,83 @@ public class App {
public static void main(String[] args) throws FileNotFoundException {
App app = new App();
app.printScores(app.loadScores());
/*použijte metody generateScores, saveScores (i pro soubor s adresářem)
* A pro soubory bestScore-ok.csv a bestScores-err.csv využijte metodu
* App.class.getResourceAsStream a loadScoresFromStream*/
//TODO
List<Score> scores = app.generateScores(200);
app.saveScores(scores, "test.csv");
app.saveScores(scores, "test/test.csv");
try {
app.printScores(app.loadScoresFromStream(new InputStreamReader(App.class.getResourceAsStream("/bestScore-ok.csv"))));
app.printScores(app.loadScoresFromStream(new InputStreamReader(App.class.getResourceAsStream("/bestScores-err.csv"))));
} catch (ScoreNotLoaded e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*zajistěte aby metoda vytvořila kolekci objektů Score dle daného počtu*/
public List<Score> generateScores(int count) {
//TODO
return null;
List<Score> scores = new ArrayList<Score>();
for (int i = 0; i < count; i++) {
scores.add(Score.generate());
}
return scores;
}
/*zajistěte aby se daná kolekce zapsala do souboru ve formátu csv (hodnoty jsou oddělené středníkem nebo čárkou)
* Zajistěte aby se v případě potřeby vytvořili i adresáře uvedené v názvu souboru*/
public void saveScores(List<Score> scores, String file) {
//TODO
public void saveScores(List<Score> scores, String file) throws FileNotFoundException {
Paths.get(file).toAbsolutePath().getParent().toFile().mkdirs();
try (PrintWriter printWriter = new PrintWriter(file)) {
for (Score score : scores) {
printWriter.format("%s;%d%n", score.getName(), score.getPoints());
}
}
}
/*Zajistěte aby metoda vypsala kolekci do konzole*/
public void printScores(List<Score> scores) {
//TODO
for (Score score : scores) {
System.out.println(score);
}
}
/*zajistěte aby metoda načetla score ze souboru bestScores.csv
* pomocí metody loadScoresFromFile
* případnou vyjímku odchťte a vypište ji do konzole.
* Metoda v tomto případě bude vracet prázdnou kolekci.
* Otestujte chování metody v případě nenexistujícího souboru.*/
public List<Score> loadScores() {
//TODO
return null;
try {
List<Score> scores = loadScoresFromFile("bestScores.csv");
return scores;
} catch (ScoreNotLoaded e) {
System.out.println("Exception \"" + e.getMessage() + "\". alreaded loaded scores:" + e.getCount());
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return Collections.emptyList();
}
/*Pro daný soubor vytvořte Reader a s využitím metody loadScoresFromStream
* načtěte score. Odchyťte vyjímku ScoreNotLoaded vytvořte novou stejného typu,
* ale to message přidejte název souboru jehož načítání selhalo.
* Ostatní vyjímky předejte výše*/
public List<Score> loadScoresFromFile(String filename) {
//TODO
return null;
public List<Score> loadScoresFromFile(String filename) throws ScoreNotLoaded, FileNotFoundException, IOException {
try (Reader inputReader = new FileReader(filename)) {
return loadScoresFromStream(inputReader);
} catch (ScoreNotLoaded e) {
throw new ScoreNotLoaded("Info about scores from file " + filename + "cannot be loaded.", e.getCount(), e);
}
}
/*Proveďte samotné načtení dat z Readru. Počítejte počet načtených score.
*Pokud řádek obsahuje neplatný počet bodů (NomberFormatException) přeskočte ho a pouze do konzoli vypište
*informaci o přeskočení řádku.
*V případě jakékoliv jiné chyby/vyjímky (Exception) vytvořte vyjímku ScoreNotLoaded,
*která bude obsahovat i počet již načtených řádků*/
public List<Score> loadScoresFromStream(Reader inputReader) {
//TODO
return null;
public List<Score> loadScoresFromStream(Reader inputReader) throws ScoreNotLoaded {
int count = 0;
try (BufferedReader bufferedReader = new BufferedReader(inputReader)) {
String line;
List<Score> scores = new ArrayList<>();
while ((line = bufferedReader.readLine()) != null) {
String[] parts = line.split(";");
try {
scores.add(new Score(parts[0], Integer.parseInt(parts[1])));
count++;
} catch (NumberFormatException e) {
System.out.println(
String.format("WARNING: Cannot parse points for player %s. Value: %s", parts[0], parts[1]));
}
}
return scores;
} catch (Exception e) {
throw new ScoreNotLoaded("Info about scores cannot be loaded.", count, e);
}
}
}
}
\ No newline at end of file
......@@ -2,12 +2,37 @@ package cz.vsb.fei.lab;
public class Score {
/*doplňte třídu tak aby měla dva parametry:
* name typu string
* points typu int
* Přidejte get/set metody pro oba parametry
* překryjte metodu toString
* vytvořte statickou metodu generate, která vygeneruje náhodné score s využitím metody Utilities.getRandomNick*/
private String name;
private int points;
public Score(String name, int points) {
this.name = name;
this.points = points;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
public static Score generate() {
return new Score(Utilities.getRandomNick(), Utilities.RANDOM.nextInt(20, 300));
}
@Override
public String toString() {
return "Score [name=" + name + ", points=" + points + "]";
}
//TODO
}
package cz.vsb.fei.lab;
public class ScoreNotLoaded {
/*Zajistěte aby třída byla vyjímka s konstruktorem se třemi parametry:
* message typu string
* count typu int
* ex tybu Throwable
* parametry message a ex využijte pro volání konstruktoru předka*/
public class ScoreNotLoaded extends Exception {
private static final long serialVersionUID = -3234631445203246158L;
//TODO
private int count;
public ScoreNotLoaded(String message, int count) {
super(message);
this.count = count;
}
public ScoreNotLoaded(String message, int count, Throwable cause) {
super(message, cause);
this.count = count;
}
public int getCount() {
return count;
}
}
......@@ -4,7 +4,7 @@ import java.util.Random;
public class Utilities {
public static final Random RANDOM = new Random();
public static final String[] nicks = { "CyberSurfer", "PixelPioneer", "SocialSavvy", "DigitalDynamo", "ByteBuddy", "InstaGuru",
public static final String[] niks = { "CyberSurfer", "PixelPioneer", "SocialSavvy", "DigitalDynamo", "ByteBuddy", "InstaGuru",
"TikTokTornado", "SnapMaster", "TweetTrendsetter", "ChatChampion", "HashtagHero", "EmojiEnthusiast",
"StoryStylist", "SelfieStar", "FilterFanatic", "VlogVirtuoso", "Memelord", "InfluencerInsider",
"StreamSupreme", "GeekyGizmo", "CodeCommander", "JavaJuggernaut", "ByteNinja", "SyntaxSamurai",
......@@ -23,6 +23,6 @@ public class Utilities {
"CloudConqueror", "EchoExplorer", "FunctionFanatic", "RobotRanger" };
public static String getRandomNick() {
return nicks[RANDOM.nextInt(nicks.length)];
return niks[RANDOM.nextInt(niks.length)];
}
}
......@@ -60,7 +60,7 @@ class ClassStructureTest {
}
@Test
void loadScoresFromStreamTest() throws Exception {
void loadScoresFromStreamTest() throws ScoreNotLoaded {
App app = new App();
assertTrue(app.loadScoresFromStream(new InputStreamReader(App.class.getResourceAsStream("/bestScore-ok.csv")))
.size() > 1);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment