Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
Ik herhaal mijn tip
Hier ( [topic=172821] )
staat hoe je je bestand kan inlezen in een List van Strings.
Daarna kan je met Math.random een index in die List kiezen en de String eruit halen.
Dus: waar lukt het niet?
Hier ( [topic=172821] )
staat hoe je je bestand kan inlezen in een List van Strings.
Daarna kan je met Math.random een index in die List kiezen en de String eruit halen.
Dus: waar lukt het niet?
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Verwijderd
Wat mij de handigste oplossing lijkt is eerst alle regels importeren naar een array, en daar een regel uit kiezen at random.
Maar over de vraag hoe weet je nou wanneer het een regel is? Aan het eind van een regel staat het character '/n' of '/r' of allebij. Je kunt ook kijken naar een StreamTokenizer.
Maar over de vraag hoe weet je nou wanneer het een regel is? Aan het eind van een regel staat het character '/n' of '/r' of allebij. Je kunt ook kijken naar een StreamTokenizer.
while(niet_gevonden_enter)
{
$woord.=leesletterin()
}
Oftewel, letters inlezen totdat je een enterteken tegenkomt.
{
$woord.=leesletterin()
}
Oftewel, letters inlezen totdat je een enterteken tegenkomt.
Deze methode moet je dus hebben:
Hierna is het toch niet meer moeilijk?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| /**
* Returns an List with the contents of the specified file.
*
* @param file the file to read
*/
public static List getList(File file) throws IOException, FileNotFoundException
{
List result = new ArrayList();
String s;
FileInputStream fileInput = new FileInputStream(file);
BufferedReader data = new BufferedReader(new InputStreamReader(fileInput));
while((s = data.readLine())!=null)
{
result.add(s);
}
fileInput.close();
return result;
} |
Hierna is het toch niet meer moeilijk?
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Voor de puristen die vinden dat het inlezen van een hele file niet mooi is, nog een betere en toch generieke oplossing
.
Ik de methode nu geparameterizeerd met een ContentHandler. Deze handelt de regels af. Ik heb een implementatie gemaakt die regel nummer x oplevert...
De interface:
De implementatie:
Ik heb het niet getest dus er kan een klein foutje in zitten, maar het zal vast wel ongeveer werken
. Uiteraard kan je de eerste methode die een List inleest uitdrukken door een simpele ContentHandler te schrijven.
Je hoeft nu alleen nog maar de zaak te initialiseren en Math.random aan te roepen en je hebt een supersnelle oplossing
.
Edit: voor de XML freaks: ja dit is SAX
Edit2: Oeps, grof foutje
Ik de methode nu geparameterizeerd met een ContentHandler. Deze handelt de regels af. Ik heb een implementatie gemaakt die regel nummer x oplevert...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| import java.io.*;
public class FileReader
{
public void read(File file, ContentHandler handler) throws IOException, FileNotFoundException
{
FileInputStream fileInput = new FileInputStream(file);
BufferedReader data = new BufferedReader(new InputStreamReader(fileInput));
String s;
boolean proceed = true;
while((s = data.readLine())!=null && proceed)
{
proceed = handler.handle(s);
}
fileInput.close();
}
} |
De interface:
code:
1
2
3
4
| public interface ContentHandler
{
public boolean handle(String line);
} |
De implementatie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| public class LineReader implements ContentHandler
{
private int _lineIndex;
private int _nextIndex;
private String _result;
public LineReader(int lineIndex)
{
super();
_nextIndex = 0;
_lineIndex = lineIndex;
}
public boolean handle(String line)
{
boolean proceed;
if(_nextIndex == _lineIndex)
{
_result = line;
proceed = false;
}
else
{
proceed = true;
}
_nextIndex++;
return proceed;
}
public String getResult()
{
return _result;
}
} |
Ik heb het niet getest dus er kan een klein foutje in zitten, maar het zal vast wel ongeveer werken
Je hoeft nu alleen nog maar de zaak te initialiseren en Math.random aan te roepen en je hebt een supersnelle oplossing
Edit: voor de XML freaks: ja dit is SAX
Edit2: Oeps, grof foutje
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Hij werkt goed
.
Heb nog ff een test geschreven:
Heb jij ff mazzel met mijn verveling
Heb nog ff een test geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public static void main(String[] ps)
{
try
{
LineReader reader = new LineReader(0);
new FileReader().read(new File("LineReader.java"), reader);
System.out.println("Result: " + reader.getResult());
}
catch(Exception exc)
{
exc.printStackTrace();
}
} |
Heb jij ff mazzel met mijn verveling
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Let op: hij telt vanaf 0....
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Is het gelukt of is er nog iets onduidelijk?
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Pagina: 1