Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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 av Cemi
Lenke til kommentar

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 av stelar7
Lenke til kommentar

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 av jonny
Lenke til kommentar

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 av quantum
Lenke til kommentar

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

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 av jonny
Lenke til kommentar

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

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

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 av g_threepwood
Lenke til kommentar

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

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 av dabear
  • Liker 1
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...