Imam problem da dodam nove reci u vec postojecu listu. Naime program radi delimicno, ukoliko zelim da izlistam sve ubacene reci (SWITCH 3) tada vidim nove reci ubacene na zadnje mesto u listi uz pomoc metode sa (SWITCHA 2).
Medjutim ukoliko zelim da pokrenem metodu test() uz pomoc
(SWITCHA 1) te nove reci se nikada ne pojave u listi. A trebalo bi.
Evo koda za sve 3 klase koje su po mom misljenju odgovorne za problem.
Problem je zadnja linija koda u metodi wordMenu() po meni ali nisam siguran. Kod inace prolazi kompilator samo sto ne dodaje naknadno ubacene reci u nov test.
import java.util.Scanner;
/**
* Class which interacts with user using scanner.
* And runs the main method of the program.
*
* @author (Igor Mijatovic)
* @version 1.0(2011.11.06)
*/
public class Menu
{
public Scanner mScanner;
private static TestGenerator mGenerator = new TestGenerator();
private WordDatabase mDatabase;
/**
* Constructor for objects of class Menu
*
*/
public Menu()
{
mScanner = new Scanner(System.in);
mDatabase = new WordDatabase();
}
/**
* Main method that runs our program.
* From welcome menu trough test or adding new words.
* Up to the goodbye screen.
*
*/
public void show()
{
login();
while(true)
{
welcomeMenu();
if(!mScanner.hasNextInt())
{
System.out.println(mScanner.nextLine() + " är inte giltigt input");
continue;
}
int option = mScanner.nextInt();
switch(option)
{
case 1:
//clearScreen();
Test test = mGenerator.generateNewTest();
test.start();
break;
case 2:
clearScreen();
wordMenu();
clearScreen();
break;
case 3:
clearScreen();
listWords();
break;
case 4:
clearScreen();
if(goodbyeMenu()){
return;
}
else{
}
break;
default:
System.out.println("--> Förstår inte <--");
break;
}
}
}
/**
* Method that list all words currently in database.
*
*/
private void listWords()
{
for(int i = 0; i < mDatabase.size(); i++)
{
System.out.println(mDatabase.get(i));
}
System.out.println();
}
/**
* Method that prints out welcome text.
* Helps with keeping main method easier to understand.
*
*/
private void welcomeMenu()
{
System.out.println("Hej och välkommen till Igor's glostränare!");
System.out.println();
System.out.println("1.Kör glostest");
System.out.println("2.Registera ord");
System.out.println("3.Skriv ut alla glösor.");
System.out.println("4.Avsluta testet.");
System.out.println();
System.out.print("Vad vill du göra ? --> ");
}
/**
* Method that takes users name.
* Helps with keeping main method easier to understand.
*
*/
private void login()
{
System.out.print("Ditt namn: ");
mScanner.nextLine();
System.out.print("\f");
}
/**
* Method that allows user to add new words into database.
*
*/
private void wordMenu()
{
System.out.println();
System.out.println("Lägga till ord menyn");
System.out.println();
System.out.print("Svenska:-->");
String Svenska = mScanner.next();
System.out.println();
System.out.print("Engelska:-->");
String Engelska = mScanner.next();
System.out.println();
System.out.print("-->");
System.out.println(Svenska + ":" + Engelska);
System.out.println();
Word word = new Word(Svenska, Engelska);
mDatabase.add(word);
}
/**
* Method that creates goodbye screen.
*
*/
private boolean goodbyeMenu()
{
System.out.println("Är du säker att du ska avsluta program");
System.out.println();
System.out.println(" 1 - avsluta");
System.out.println(" 2 - gå tillbaka");
System.out.print("-->");
int input = mScanner.nextInt();
if(input == 1){
return true;
}
else{
return false;
}
}
/**
* Method that clears the screen allowing better overwiev.
*
*/
private void clearScreen()
{
System.out.print('\u000C');
}
}
Klasa test gde je mozda problem
import java.util.ArrayList;
import java.util.Iterator;
/**
* Class that runs test and counting results.
*
* @author (Igor Mijatovic)
* @version 1.0(2011.11.06)
*/
public class Test
{
private ArrayList<Word> mTestWords;
private int mScore;
/**
* Constructor for objects of class Test.
*
* @param is ArrayList wordlist from class Word.
*/
public Test(ArrayList<Word> wordList)
{
mTestWords = wordList;
mScore=0;
}
/**
* Method which count and print out test results.
*
*/
public void start()
{
System.out.println("Nu startar testet");
Iterator<Word> it = mTestWords.iterator();
while(it.hasNext())
{
if(it.next().answer())
{
mScore++;
}
}
System.out.println("Testet avlklarat; " + mScore + "/" + mTestWords.size());
}
}
Klasa TestGenerator koja kreira test
import java.util.ArrayList;
/**
* This class generates tests using class RandomN and WordDatabase.
*
* @author (Igor Mijatovic)
* @version 1.0(2011.11.06)
*/
public class TestGenerator
{
private RandomN mRandom;
private WordDatabase mDatabase;
/**
* Constructor for objects of class TestGenerator.
*
*/
public TestGenerator()
{
mDatabase = new WordDatabase();
mRandom = new RandomN(mDatabase.size());
}
/**
* Method that add new words to our wordlist.
*
* @param new (word).
*/
public void addWord(Word word)
{
mDatabase.add(word);
mRandom = new RandomN(mDatabase.size());
}
/**
* Method which randomly pick values from our database.
*
* @return Test randomly picked values from database list.
*/
public Test generateNewTest()
{
ArrayList<Word> wordlist = new ArrayList<Word>();
for(int i = 0; i < 10; i++)
{
int max = mDatabase.size();
Word word = mDatabase.get(mRandom.getRandomValue(max));
while(wordlist.contains(word))
{
word = mDatabase.get(mRandom.getRandomValue(max));
}
wordlist.add(word);
}
return new Test(wordlist);
}
}
|