06. december 2011 - 00:32Der er
30 kommentarer og 1 løsning
returnere højeste værdi
Hejsa igen eksperten og Arne :-)
Jeg er jo igang med et opgavesæt, hvor der i alt er 10 opgaver. Det er nogenlunde det samme som kan komme til eksamen, så jeg vil gerne forstå dem korrekt, derfor stiller jeg nok også nogle dumme spørgsmål. Som set i tråden tidligere fra idag, er jeg nu kommet til spørgsmål 7, som lyder:
("Programmér metoden mostEntertaining. Metoden skal returnere kampen med flest scorede mål (det kan antages at der er spillet mindst en kamp i turneringen, og hvis flere kampe er lige målrige, er det underordnet hvilken der returneres). Udvid Game-klassen med de nødvendige get-metoder")
Hvordan griber jeg dette an? Det værste er at jeg er virkelig på bar bund, hvordan jeg starter ud?
I din Driver-klasse har du 3 Game-objekter, g1, g2 og g3. Du skal returnere det Game-objekt hvor (homeScore + awayScore) er størst.
Først lavet du en get-metode i Game-klassen:
public int getTotalScore() { int totalScore = homeScore + awayScore; return totalScore; }
I og med at opgiven siger du KUN har tre objekter, kan du gøre det ved at lave denne metode i Game-klassen:
public string mostEntertaining() { Game tmpGame; if (g1.getTotalScore() > g2.getTotalScore()) tmpGame = g1; else tmpGame = g2;
if (tmpGame.getTotalScore() > g3.getTotalScore()) return tmpGame.toString(); else return g3.toString(); }
Hvis der var tale om flere objekter end de 3 Game-objekter, kunne du have smidt dem i en ArrayList og itereret gennem den. Men nu hvor der kun er tre, kan du bruge denne løsning.
Nu stiller jeg absolut ikke spørgsmål til jeres viden, men synes bare det er så mærkeligt. Vi skal programmere 10 spørgsmål på en ½ time. Jeg har en del andre eksamensopgaver, og jeg har også set andres, hvor deres kode overhovedet ikke er så lang i spørgsmål 7.
Kan man ikke skrive koden på en meget kortere måde?
men det er selvføgelig også lidt andre spørgsmål. Her er et andet et , som vi afleverede som også er under spørg 7:
"Programmér metoden selectByAuthor. Metoden skal returnere alle artikler skrevet af en bestemt forfatter. Udvid Article-klassen med de nødvendige get-metoder"
hvor vi skrev:
public List<Article> selectByAuthor(String s) { List<Article> result = new ArrayList<Article>(); for (Article a : listOfArticle) { if (a.getAuthor().equals(s)) { result.add(a); } } return result; }
Men det er vel ikke noget jeg kan bruge i det andet spørgsmål ?
Jeg synes sku det er svært. Der er vel ikke en der kan vise mig hvordan jeg skal skrive det. Det er på ingen måde for at skrive af, men simpelthen se formen på det. jeg har skrevet
public Game mostEntertaining() { { Game tmpGame = null; for(Game g : Game) { if (g1.getTotalScore() > g2.getTotalScore()) tmpGame = g1; else tmpGame = g2;
Logikken er simpel: - du loeber alle games igennem - hvis game er mere underholdende end det hidtil mest underholdende game saa opdaterer du game til at vaere det hidtil mest underholdende game
public class Tournament { private ArrayList<Game> listOfGame= new ArrayList<Game>();
public Tournament(String name) {
}
public void add(Game g) {
listOfGame.add(g); }
public void remove(Game g) {
listOfGame.remove(g); }
public Game mostEntertaining() { { Game tmpGame = null; for(Game g : Game) { if (g1.getTotalScore() > g2.getTotalScore()) tmpGame = g1; else tmpGame = g2;
Proev og forestil dig at du skal finde det stoerste af en vilkaarlig liste af tal.
4 7 2 3 8 5
Hvordan vil du goere det?
En mulighed er: - set max=foerste tal=4 - sammenlign max med 7 og da 7 er stoerre saet max=7 - sammenlign max med 2 og goer ingenting - sammenlign max med 3 og goer ingenting - sammenlign max med 8 og da 8 er stoerre saet max=8 - sammenlign max med 5 og goer ingenting
public class Max { public static void main(String[] args) { ArrayList<Integer> lst = new ArrayList<Integer>(); lst.add(4); lst.add(7); lst.add(2); lst.add(3); lst.add(8); lst.add(5); int max = lst.get(0); for(int i = 1; i < lst.size()-1; i++) { if(max < lst.get(i)) { max = lst.get(i); } } System.out.println(max); } }
Jeg er ved at være lidt mere med nu. Som der står i opgaven:
Programmér metoden mostEntertaining. Metoden skal returnere kampen med flest scorede mål (det kan antages at der er spillet mindst en kamp i turneringen, og hvis flere kampe er lige målrige, er det underordnet hvilken der returneres). Udvid Game-klassen med de nødvendige get-metoder.
I min driver klasser har jeg nu koden:
/** * Write a description of class Driver here. * * @author (your name) * @version (a version number or a date) */ public class Driver { public static void exam() {
Game g1 = new Game("FCK", "Esbjerg", 8, 6); Game g2 = new Game("AGF", "Brøndby", 2, 0); Game g3 = new Game("Silkeborg", "Viborg", 3, 9); System.out.println(g1.toString()); System.out.println(g2.toString()); System.out.println(g3.toString());
Tournament t = new Tournament("t"); t.add(g1); t.add(g2); t.add(g3); } }
I min Game:
/** * Write a description of class Game here. * * @author (your name) * @version (a version number or a date) */ public class Game { private String home, away; private int homeScore, awayScore; public Game(String home, String away, int homeScore, int awayScore) { this.home = home; this.away = away; this.homeScore = homeScore; this.awayScore = awayScore; }
public class Tournament { private ArrayList<Game> listOfGame= new ArrayList<Game>();
public Tournament(String name) {
}
public void add(Game g) {
listOfGame.add(g); }
public void remove(Game g) {
listOfGame.remove(g); }
public Game mostEntertaining() { ArrayList<Integer> lst = new ArrayList<Integer>(); lst.add(); lst.add(); lst.add(); int max = lst.get(0); for(int i = 1; i<lst.size()-1; i++) { if(max < lst.get(i)) { max = lst.get(i); } } System.out.println(max); }
/*public int totalScores() {
}
public void printGames() {
} */ }
Som du skrev i #25: ArrayList<Integer> lst = new ArrayList<Integer>(); lst.add(4); lst.add(7); lst.add(2);
i lst.add(); vil jeg jo gerne have g1, g2 og g3 ind, da de i min driver klasse er defineret. Det er de kampe mål de skal returnere. Du skriver jo godt nok i #23at der ikke skal g1, g2 og g3 ind, men det er i opgaven beskrevet at det er disse kampe jeg skal hente, sådan som jeg forstår det i hvertfald.
Det er forkert hvis jeg gerne vil skrive noget med:
ArrayList<Integer> lst = new ArrayList<Integer>(); lst.add(g1); lst.add(g2); lst.add(g3);
public class FindMaxDemo { private List<Data> lst = new ArrayList<Data>(); public void addTestData() { lst.add(new Data(3)); lst.add(new Data(7)); lst.add(new Data(1)); lst.add(new Data(6)); lst.add(new Data(2)); } public Data findMax1() { if(lst.size() <= 0) return null; int maxix = 0; int maxval = lst.get(maxix).getValue(); for(int i = 1; i < lst.size(); i++) { if(maxval < lst.get(i).getValue()) { maxix = i; maxval = lst.get(maxix).getValue(); } } return lst.get(maxix); } public Data findMax2() { if(lst.size() <= 0) return null; Data res = lst.get(0); for(int i = 1; i < lst.size(); i++) { if(res.getValue() < lst.get(i).getValue()) { res = lst.get(i); } } return res; } public Data findMax3() { return Collections.max(lst, new Comparator<Data>() { public int compare(Data d1, Data d2) { return d1.getValue() - d2.getValue(); } }); } public static void main(String[] args) { FindMaxDemo demo = new FindMaxDemo(); demo.addTestData(); System.out.println(demo.findMax1().getValue()); System.out.println(demo.findMax2().getValue()); System.out.println(demo.findMax3().getValue()); } }
class Data { private int value; public Data(int value) { this.value = value; } public int getValue() { return value; } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.