Kap 10 øvelse 2 (Et forslag til løsning)

Her kan du diskutere opgaverne til Java serien og evt. dele dine egne løsningsforslag med andre.
Besvar
Henrik Halle
Entusiast
Entusiast
Indlæg: 38
Tilmeldt: 4. maj 2014, 09:22

Kap 10 øvelse 2 (Et forslag til løsning)

Indlæg af Henrik Halle » 8. maj 2014, 16:51

Jeg startede med at skrive health-damage; og kunne ikke få det til at virke. Så der skulle jeg lige tænke mig om.
Så smed jeg også lige en ekstra if sætning ind :)

Kode: Vælg alt

package kap010;

public class Main {

	public static void main(String[] args) {
		int health = 100;
		
		while (health>0) {
			int damage=10;
			health-=damage;
			System.out.println(health);
			if (health == 0) {
				System.out.println("Game over");
			}
		}
	}
}

codegenic
Begynder
Indlæg: 8
Tilmeldt: 3. apr 2018, 12:16

Re: Kap 10 øvelse 2 (Et forslag til løsning)

Indlæg af codegenic » 3. apr 2018, 12:24

Jeg har smidt health -= under sys print, da den ellers også skriver 0, og tanken er vel, at den ikke skal udskrive, med mindre, værdien er over 0?

Kode: Vælg alt

int health = 100;

while (health > 0){
	int damage = 10;

	System.out.println(health);
	health-=damage;
}

cristian
Moderator
Moderator
Indlæg: 882
Tilmeldt: 26. sep 2011, 21:31
Kontakt:

Re: Kap 10 øvelse 2 (Et forslag til løsning)

Indlæg af cristian » 4. apr 2018, 14:02

I erklære begge

Kode: Vælg alt

int damage = 10;
inde i jeres while loop, så her er lidt stof til eftertanke.

Hver gang i siger int noget = X, så reservere i 32 bits i systemets hukommelse.
I teorien når i så siger

Kode: Vælg alt

while (noget) {
   int i = X;
}
og while loppen køre 1.000 gange, så reserverer i 32 bits 1.000 gange i hukommelsen som Java JVM derefter
skal garbage collect når den får tid.

Med strings ved jeg at Java's JVM er smart nok til ikke at erklære den samme string X gange, den bruger bare det samme String objekt.
Men jeg ved ikke om det er det samme med primitive data typer på stående fod.

Det ikke fordi at det er et problem som sådan fordi vi i dag har adskillige gigabyte i produktions systemer.
Men hvis typen bliver erklæret 1.000 gange eller 1.000.000 million gange så tager alt dette tid for både Java's JVM og den tid som systemet har tilgængelig i form af CPU tid. Og afhængig af hvor mange gange lækken køre kan det koste en del $

codegenic
Begynder
Indlæg: 8
Tilmeldt: 3. apr 2018, 12:16

Re: Kap 10 øvelse 2 (Et forslag til løsning)

Indlæg af codegenic » 4. apr 2018, 14:30

Det er absolut stof til eftertanke. Troede blot, at variabler uden for curly brackets var et No go I den her forbindelse, grundet hensynet til scope. Tænker så efterfølgende, at det vist kun er syso og variablen der skal være inde for samme brackets...

Hvis jeg erklærede min int damage før, ville jeg vel ramme helt ved siden af intentionen?

cristian
Moderator
Moderator
Indlæg: 882
Tilmeldt: 26. sep 2011, 21:31
Kontakt:

Re: Kap 10 øvelse 2 (Et forslag til løsning)

Indlæg af cristian » 4. apr 2018, 16:50

codegenic skrev:Hvis jeg erklærede min int damage før, ville jeg vel ramme helt ved siden af intentionen?
Du kan placere damage sammen med health

Kode: Vælg alt

public static void main(String[] args) {
      int health = 100;
      int damage = 10;
      while (health>0) {
         ...
      }
Dette vil give dine integers scope af main metoden, hvilket while løkken godt kan se.

Eksempel
Et scope eller en blok (hedder begge dele) er alt mellem { og }.
Du kan også lave så mange scopes eller blokke i hinanden som du vil.

Du behøver ikke en metode f.eks while(noget) { }
En blok kan godt stå alene som i eksemplet neden under.

Kode: Vælg alt

// scope 1
{
	int dmg = 10;
	// scope 2
	{
		int dmg2 = 5;//dmg2 lever og "dør" i denne blok.
		System.out.println("dmg1" + dmg1);//kan vi godt
		System.out.println("dmg2" + dmg2);//kan vi godt
	}
	
	System.out.println("dmg1" + dmg1);//kan vi godt
	System.out.println("dmg2" + dmg2);//kan vi ikke
}

codegenic
Begynder
Indlæg: 8
Tilmeldt: 3. apr 2018, 12:16

Re: Kap 10 øvelse 2 (Et forslag til løsning)

Indlæg af codegenic » 8. apr 2018, 10:49

Aaaah, endnu en åbenbaring, tak! :D

Besvar