g_threepwood Skrevet 4. juni 2013 Del Skrevet 4. juni 2013 Kan noen forklare hva som skrives ut og begrunne hvorfor, eller forklare hvorfor koden ikke vil kompilere hvis det er tilfelle? 1. System.out.println(1+2); 2. System.out.println(”1”+”2”); 3. int n = 2; int m = n + 1; n += m*2; System.out.println(n); n = 0; 4. int tall = 0; for (int i=5; i>0; i--) { for (int j=i; j>0; j--) { tall--; } } System.out.println(tall); 5. int x = 0 for (int i = 1; i < 10; i = i + 1) { System.out.println(x); x = i * 2; } 6. int x; int y = ”7”; y = x + ”3”; System.out.println(x + y); 7. int z = 0; int x = 0; int y = 7; try { z = y/x; } catch (NullPointerException e) { z = 2; } catch (Exception e) { z = 3; } finally { System.out.println(“Hello!”); } System.out.println(z); 8. public class Klasse { private int felt; public Klasse(int f) { felt = f; } public int metode(int i) { if (i<felt) return i; else if (i <=2*felt) return felt; return 0; } } public class Klient { public static void main(String[] args) { Klasse k = new Klasse(4); System.out.println(k.metode(5)); } } 9. public class Ansatt { private int lønn; public int getLønn() { return lønn; } public void setLønn(int x) { lønn = x; } ... } Ansatt s1 = new Ansatt(); s1.setLønn(150); Ansatt s2 = new Ansatt(); s2.setLønn(200); s2 = s1; s1.setLønn(170); s2.setLønn(180); System.out.println(s1.getLønn()); System.out.println(s2.getLønn()); Lenke til kommentar
Cemi Skrevet 4. juni 2013 Del Skrevet 4. juni 2013 (endret) Jeg antar at dette er en eksamen grunnet tittelen, og antar du derfor vil finne det ut selv? Verdien til variablene, eller eventuelt den eksplisitte stringen, inne i kallet System.out.println(HER) vil skrives ut. Lykke til! Endret 4. juni 2013 av Cemi Lenke til kommentar
g_threepwood Skrevet 4. juni 2013 Forfatter Del Skrevet 4. juni 2013 Dette er oppgaver hentet fra et gammelt eksamenssett, så ingen fare. Lenke til kommentar
quantum Skrevet 4. juni 2013 Del Skrevet 4. juni 2013 Oppgave 1: "3" - fordi 1 + 2 = 3. Lenke til kommentar
Persn Skrevet 4. juni 2013 Del Skrevet 4. juni 2013 Oppgave 1: "3" - fordi 1 + 2 = 3. Du må ikke gå for fort frem nå da Lenke til kommentar
stelar7 Skrevet 4. juni 2013 Del Skrevet 4. juni 2013 (endret) tror dette skulle stemme (hoderekning ) 1. System.out.println(1+2); 1 + 2 = 3 2. System.out.println(”1”+”2”); string + string = string 12 3. int n = 2; int m = n + 1; n += m*2; System.out.println(n); n = 0; n = 2 + (3*2) = 8 4. int tall = 0; for (int i=5; i>0; i--) { for (int j=i; j>0; j--) { tall--; } } System.out.println(tall); 0-5-4-3-2-1 = -15 5. int x = 0; for (int i = 1; i < 10; i = i + 1) { System.out.println(x); x = i * 2; } 0, 2, 4, 6, 8, 10, 12, 14, 16 6. int x; int y = ”7”; y = x + ”3”; System.out.println(x + y); error, string != int 7. int z = 0; int x = 0; int y = 7; try { z = y/x; } catch (NullPointerException e) { z = 2; } catch (Exception e) { z = 3; } finally { System.out.println(“Hello!”); } System.out.println(z); z = 3 fordi arithmicexception blir ikke tatt av nullpointerexception 8. public class Klasse { private int felt; public Klasse(int f) { felt = f; } public int metode(int i) { if (i<felt) return i; else if (i <=2*felt) return felt; return 0; } } public class Klient { public static void main(String[] args) { Klasse k = new Klasse(4); System.out.println(k.metode(5)); } } output 4 9. public class Ansatt { private int lønn; public int getLønn() { return lønn; } public void setLønn(int x) { lønn = x; } } Ansatt s1 = new Ansatt(); s1.setLønn(150); Ansatt s2 = new Ansatt(); s2.setLønn(200); s2 = s1; s1.setLønn(170); s2.setLønn(180); System.out.println(s1.getLønn()); System.out.println(s2.getLønn()); output blir 170, 180 Endret 4. juni 2013 av stelar7 Lenke til kommentar
jonny Skrevet 4. juni 2013 Del Skrevet 4. juni 2013 (endret) 1. System.out.println(1+2); Vil skrive ut 3 og linjeskift. 2. System.out.println(”1”+”2”); Vil skrive ut 12 og linjeskift. 3. int n = 2; int m = n + 1; n += m*2; System.out.println(n); n = 0; Vil skrive ut 8 og linjeskift. 4. int tall = 0; for (int i=5; i>0; i--) { for (int j=i; j>0; j--) { tall--; } } System.out.println(tall); Vil skrive ut -15 og linjeskift. 5. int x = 0 for (int i = 1; i < 10; i = i + 1) { System.out.println(x); x = i * 2; } Vil ikke kompilere, mangler semikolon etter int x = 0 6. int x; int y = ”7”; y = x + ”3”; System.out.println(x + y); Vil ikke kompilere, kan ikke tilordne et String-objekt ("7") til en int-variabel (y). 7. int z = 0; int x = 0; int y = 7; try { z = y/x; } catch (NullPointerException e) { z = 2; } catch (Exception e) { z = 3; } finally { System.out.println(“Hello!”); } System.out.println(z); Vil skrive ut Hello! og linjeskift, deretter 3 og linjeskift. 8. public class Klasse { private int felt; public Klasse(int f) { felt = f; } public int metode(int i) { if (i<felt) return i; else if (i <=2*felt) return felt; return 0; } } public class Klient { public static void main(String[] args) { Klasse k = new Klasse(4); System.out.println(k.metode(5)); } } Vil skrive ut 4 og linjeskift. 9. public class Ansatt { private int lønn; public int getLønn() { return lønn; } public void setLønn(int x) { lønn = x; } ... } Ansatt s1 = new Ansatt(); s1.setLønn(150); Ansatt s2 = new Ansatt(); s2.setLønn(200); s2 = s1; s1.setLønn(170); s2.setLønn(180); System.out.println(s1.getLønn()); System.out.println(s2.getLønn()); Vil ikke kompilere, kompilatoren vil klage på ... Endret 4. juni 2013 av jonny Lenke til kommentar
quantum Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 Du må ikke gå for fort frem nå da overhodet ikke ... den der må nok få synke litt ... Lenke til kommentar
quantum Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 (endret) Altså, her er det jo bare å kompilere ivei, og enten se på feilmelding eller output fra kjøringen. Tror dessverre ikke TS kommer i mål på eksamen om han ikke gjør en liten innsats selv ... Ikke all koden kompilerer eller kjører som den står, Oppgave 9 f.eks. kjører helt fint om man lager en main-metode i Ansatt-klassen og flytter koden inn i den. Da ser man at siden s1 og s2 er satt til å referere samme Ansatt-instans så skriver koden nødvendigvis ut det samme tallet to ganger. Antar det er der pointet med oppgaven ligger. public class Ansatt { private int lønn; public int getLønn() { return lønn; } public void setLønn(int x) { lønn = x; } public static void main(String [] args) { Ansatt s1 = new Ansatt(); s1.setLønn(150); Ansatt s2 = new Ansatt(); s2.setLønn(200); s2 = s1; s1.setLønn(170); s2.setLønn(180); System.out.println(s1.getLønn()); System.out.println(s2.getLønn()); } } Output 180 180 Endret 5. juni 2013 av quantum Lenke til kommentar
g_threepwood Skrevet 5. juni 2013 Forfatter Del Skrevet 5. juni 2013 Kan noen fortelle meg helt konkret hva som skjer i oppgave 4 og 5? Forstår meg ikke helt på for-løkken. Lenke til kommentar
GeirGrusom Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 Kan noen fortelle meg helt konkret hva som skjer i oppgave 4 og 5? Forstår meg ikke helt på for-løkken. 4. I løkken går 5 ganger. J løkken går 5 ganger, 4, ganger, 3 ganger, 2 ganger og 1 gang. Resultatet er minus summen (ettersom den trekker 1 fra tall hver gang) av antall ganger J går, som er -(5+4+3+2+1)=-15. Lenke til kommentar
g_threepwood Skrevet 5. juni 2013 Forfatter Del Skrevet 5. juni 2013 Litt mer konkret? Forestill deg at jeg ikke har peiling, noe som ikke er langt fra sannheten. Lenke til kommentar
jonny Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 (endret) Litt mer konkret? Forestill deg at jeg ikke har peiling, noe som ikke er langt fra sannheten. Du må gå gjennom koden, kodelinje for kodelinje. Skriv ned verdien av hver variabel etterhvert. Noe slikt: int tall = 0; for (int i=5; i>0; i--) { for (int j=i; j>0; j--) { tall--; } } System.out.println(tall); int tall = 0; Variabel "tall" av type "int" har verdien 0. for (int i=5; i>0; i--) { "int i=5;" kjøres en gang før løkka starter, "i>0" kjøres før hver iterasjon i løkka, mens "i--" kjøres etter hver iterasjon i løkka. Resultatet her er at i settes til 5, og siden i > 0 vil første iterasjon av løkka starte. for (int j=i; j>0; j--) { Denne løkka ("den indre") er plassert inne i den forrige løkka ("den ytre"), og må dermed "bli ferdig" (dvs. j <= 0) før den ytre løkka kan gå videre. Det første som skjer her er at j settes til i (som nå er 5, se over). Siden 5 er større enn 0, vil den første iterasjonen av denne løkka starte. tall--; Verdien til variabelen "tall" reduseres med 1, dvs. tall = -1. } Denne markerer slutten på den indre løkka, dermed vil "j--" kjøres. j er da 4, som er større enn 0, og neste iterasjon vil kjøre. "tall" reduserers til -2, og deretter j til 3. Neste iterasjon gir tall = -3 og j = 2. Så blir tall = -4 og j = 1. Så tall = -5 og j = 0. Nå vil testen "j<0" være usann, og den indre løkka er ferdig. } Denne markerer slutten på den ytre løkka, dermed vil "i--" kjøres. i er da 4, som er større enn 0, og neste iterasjon vil kjøre (og dermed vil den indre løkka kjøres igjen, men nå er i 4 og ikke 5). Nå er det bare å fortsette denne detaljerte gjennomgangen selv, så finner du ut hva som blir skrevet ut til slutt. Endret 5. juni 2013 av jonny Lenke til kommentar
jonny Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 Når det gjelder oppgave 5, vil den ikke kompilere slik den står nå. Men hvis du legger til et semikolon etter første kodelinje går det greit: int x = 0; for (int i = 1; i < 10; i = i + 1) { System.out.println(x); x = i * 2; } Her settes x til 0 før løkka starter. i settes til 1 før løkka starter, og økes med 1 etter hver iterasjon ("i = i + 1" som er det samme som "i++"). Siden "i < 10" kjøres før hver iterasjon og avslutter løkka når i >= 10, vil løkka kjøres 9 ganger. Første gang skrives 0 ut, da x ble satt til 0 før løkka startet. For hver iterasjon kjøres "x = i * 2", som gjør at x blir satt til det dobbelte av i. Ved første iterasjon er i = 1, dermed vil 2 skrives ut ved neste iterasjon, så 4, så 6 osv. helt opp til 16. Lenke til kommentar
quantum Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 Du må gå gjennom koden, kodelinje for kodelinje. Skriv ned verdien av hver variabel etterhvert. Det kan muligens være en idé å kjøre programmet i en debugger? IntelliJ er rimelig enkelt å komme igang med, evt. Netbeans eller Eclipse. Lenke til kommentar
g_threepwood Skrevet 5. juni 2013 Forfatter Del Skrevet 5. juni 2013 (endret) Her er en ny oppgave: Lag en klasse Bachelorstudent som representerer en bachelorstudent. Informasjon vi har bruk for om bachelorstudenter er navn og studentnummer samt en samling av kombinasjoner av karakterer og fagkoder. Karakterene representeres som et heltall mellom 1 og 6, og fagkoder som strenger (”INFO132”). Dette er mitt forslag import java.util.HashMap; public class Bachelorstudent { private String navn; private int studentNummer; private HashMap<String,Integer> karakterBok; public Bachelorstudent(String studNavn, int studNum) { navn = studNavn; studentNummer = studNum; karakterBok = new HashMap<String,Integer>(); } } Ser dere noen problemer med koden? Endret 5. juni 2013 av g_threepwood Lenke til kommentar
Sssda1 Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 (endret) edit feil Endret 5. juni 2013 av perpers Lenke til kommentar
quantum Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 Som et utgangspunkt er den i og for seg ok, du kunne evt. validere navn og nummer i constructor, men før du har gjort den ferdig vil jo instanser fortone seg som sorte hull fra utsiden. Eventuelt kan du deklarere karakterBok som Map, da kan du bytte til en annen impl. av Map enn HashMap på et senere tidspunkt uten å måtte endre så mye kode. Lenke til kommentar
g_threepwood Skrevet 5. juni 2013 Forfatter Del Skrevet 5. juni 2013 Hvordan ville dere løst denne: Utvid Bachelorstudent med en metode som beregner gjennomsnittet av alle karakterene til studenten. Dersom det ikke finnes noen karakterer skal verdien 6 returneres. Lenke til kommentar
dabear Skrevet 5. juni 2013 Del Skrevet 5. juni 2013 (endret) Hvordan ville dere løst denne: Utvid Bachelorstudent med en metode som beregner gjennomsnittet av alle karakterene til studenten. Dersom det ikke finnes noen karakterer skal verdien 6 returneres. Hvorfor prøver du ikke selv, og poster resultatet du får, FØR du spør her? Her er hvordan man kan logisk sett løse problemet, dette er *ikke javakode* If karakterboka er tom returner 6 Else Lag ei løkke som går igjennom alle karakterer, summer alle karakterer. Returner denne summen delt på antallet karakterer (som du finner etter å ha kjørt ferdig overnevne løkke) edit: se denne for hvordan du kan lage ei løkke rundt en hashmap: http://www.sergiy.ca/how-to-iterate-over-a-map-in-java/ Endret 5. juni 2013 av dabear 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå