Kap 7 øvelse 1 (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 7 øvelse 1 (Et forslag til løsning)

Indlæg af Henrik Halle » 6. maj 2014, 20:52

Her mit bud på en løsning.
Er der en nem måde at tjekke om man har lukket alle sine curly-parenteser?
Når jeg kopierer min kode over holder den ikke formateringen. Kan jeg få den til det?

Kode: Vælg alt

package kap7;

public class Main {

	public static void main(String[] args) {

		int terningd10 = 11;

		switch (terningd10) {
			case 1:
				System.out.println("Du slog 1");
				break;
			case 2:
				System.out.println("Du slog 2");
				break;
			case 3:
				System.out.println("Du slog 3");
				break;
			case 4:
				System.out.println("Du slog 4");
				break;
			case 5:
				System.out.println("Du slog 5");
				break;
			case 6:
				System.out.println("Du slog 6");
				break;
			case 7:
				System.out.println("Du slog 7");
				break;
			case 8:
				System.out.println("Du slog 8");
				break;
			case 9:
				System.out.println("Du slog 9");
				break;
			case 10:
				System.out.println("Du slog 10");
				break;

			default:
				System.out.println("Det var vist en mærkelig terning");
		}
	}
}

seerex
Entusiast
Entusiast
Indlæg: 37
Tilmeldt: 17. apr 2014, 17:23

Re: Kap 7 øvelse 1 (Et forslag til løsning)

Indlæg af seerex » 7. maj 2014, 11:12

Rigtig fin løsning.

en måde at tjekke om alle brackets er lukket er ved at tælle dem. Tæl det antal åbne { du har, og det antal } du har. Hvis de ikke er ens, har du for meget af den ene eller anden :) De skal passe i 1-1 forhold. Husk også at enhver åben bracket, hører sammen med den næste lukkede. Så du kan få "omfanget" ved at finde et open bracket {, så finde det næste } lukkede, og markere alt kode imellem dem. Så har du det omfang de indkapsler.

mht formattering, holder det så ikke hvis du sætter det i code brackets? :)

Forresten, du ser ud til at være godt igang med Java serien, så jeg kunne godt tænke mig at høre hvad du syntes? :)

Henrik Halle
Entusiast
Entusiast
Indlæg: 38
Tilmeldt: 4. maj 2014, 09:22

Re: Kap 7 øvelse 1 (Et forslag til løsning)

Indlæg af Henrik Halle » 7. maj 2014, 13:06

Hej Jeppe.
Tak for din feedback.

For at sætte min mening om java-serien i perspektiv skal jeg måske fortælle, jeg er 40 år og har aldrig kodet før. Så jeg er helt grøn. Jeg har tilbage i 90érne arbejdet i lidt HTML men det er det.
Mit udgangspunkt er at jeg er lærer og gerne vil lave nogle apps og små spil til mine elever.

Jeg synes nemprogrammerig.dk og Java-serien er helt fantastisk. Jeg er vild med ideen at dele sin viden gratis.
Jeg synes særlig i forhold til jave-serien (da det er den eneste jeg er i gang med) at den er rigtig godt opbygget. Behagelig stemme og det hele bliver gennemgået fra bunden i stille og roligt tempo. Meget flot arbejde.
Jeg synes det er helt genialt at der er øvelser til de forskellige videoer.

Hvis jeg skal pege på et par ting der kunne forbedres kunne det være:
- F.eks i video 1: lidt mere information om eclips. Ikke en helt gennemgang men f.eks når man laver en ny class hvorfor skal der så sættes flueben i public static.void main ...Meget overordnet hvad skal alt det andet bruges til.

- Så kunne jeg godt tænke mig at der lå løsningsforslag til de forskellige øvelser, man kunne tjekke sine egne op i mod.

- Jeg kunne godt tænke mig øvelserne brugte alt det forudgående og ikke mest fokuserede på selve kapitlet. I begyndelsen ligger alt viden i korttidshukommelsen og det meste blive hurtigt filteret fra hvis det ikke bliver brugt. Dvs. hvordan er det nu lige med float, char og double variablerne, så det ikke per automatik kun er int der bliver brugt.

Det blev en længere post, håber det kan bruges. Jeg er i hvert fald fanget og bliver her et stykke tid.

seerex
Entusiast
Entusiast
Indlæg: 37
Tilmeldt: 17. apr 2014, 17:23

Re: Kap 7 øvelse 1 (Et forslag til løsning)

Indlæg af seerex » 8. maj 2014, 10:35

Mange tak for din feedback, og det er helt sikkert noget jeg vil tage med under fremtidige videoer!

Jeg kan allerede nu sige, at jeg er ved at bearbejde løsningsforslag til kaptilerne. Med den hastighed du gennemfører det på, kommer det nok desværre ikke dig så meget til gode, men under alle omstændigheder vil fremtidige brugere kunne bruge det. Det er rigtig fint at du poster dine løsningsforslag, for så kan de nemlig også holde sig op imod dem :)

Du har ret i at øvelserne nok kunne være lidt mere "avancerede" i den forstand at de også gik tilbage til de forrige emner for at få det helt ind på hjernen. Nu lige i forhold til de basiske datatyper (int, float, double osv), så er det som regel meget hyppigt at bruge int :) Det er ligesom "go-to" fyren, der som regel kan løse din opgave. Ellers bruger man double til komma tal, og ellers er de andre faktisk sjældent brugt (dog bruges de!).

Jeg kan til gengæld stærkt anbefale at lave sine egne øvelser (del gerne!!). Det giver nemlig rigtig god forståelse. For eksempel: "Hmm, jeg har måske lært nok nu til jeg kan lave et lille banksystem" -> PRØV DET! Hvis du nogensinde tænker noget i den stil, så bare prøv! Måske var det for meget og du kunne ikke lave det, men under alle omstændigheder har du fået en masse øvelse i både at formulere dine egne øvelser, og at omdanne "real life" problemer til kode, som er en rigtig god egenskab. :) Det kræver selvfølgelig lidt fantasi og selvdisciplin, men det er en rigtig god idé hvis man har mulighed for det.

ps. Super fedt at du dedikere dig til at lære det, netop for at videregive det til dine elever! Håber det går godt og forholdsvist smertefrit ;)

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

Re: Kap 7 øvelse 1 (Et forslag til løsning)

Indlæg af cristian » 8. maj 2014, 23:24

Er der en nem måde at tjekke om man har lukket alle sine curly-parenteser?
Det bliver du vant til at spotte rimelig hurtigt, da for hver curly bracket man laver, laver et tabulator tab for at "skille" den næste sektion fra den forrige.
Du skal tænke på at din compiler, ser ikke mellemrum, linje skifte eller dine curly-brackets. Det er udelukkende for vores skyld så vi
selv kan finde rundt i det.

Derudover hvis du markerer starten af din metode, så ville den vise den curly-bracket som slutter den.
Er den ikke hvor du forventer den, er der formentlig en fejl.

Se billede :)
Vedhæftede filer
kode-sletIgen.PNG
kode-sletIgen.PNG (27.06 KiB) Vist 3215 gange

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

Re: Kap 7 øvelse 1 (Et forslag til løsning)

Indlæg af codegenic » 4. apr 2018, 11:28

Ved ikke, om jeg har misforstået opgaven, men har grebet det an på følgende måde.
Har brugt concatenate i troen om, at jeg derved sparer tid på at tilrette Strings i hver case.

Kode: Vælg alt

public class Øvelse06 {

	public static void main(String[] args) {
		// Java kursus / undervisning #7 | Switch statements i Java
		
		// Opgave 1
		int mitTal = 4;
		switch (mitTal) {
		case 1: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 2: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 3: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 4: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 5: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 6: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 7: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 8: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 9: 
			System.out.println("Værdien er: " + mitTal);
			break;
		case 10: 
			System.out.println("Værdien er: " + mitTal);
			break;
		default: 
			System.out.println("Tallet er < 1 eller > 10 og ligger derfor udenfor værdi!");
		}
	}
}

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

Re: Kap 7 øvelse 1 (Et forslag til løsning)

Indlæg af cristian » 4. apr 2018, 13:48

codegenic skrev:Ved ikke, om jeg har misforstået opgaven, men har grebet det an på følgende måde.
Har brugt concatenate i troen om, at jeg derved sparer tid på at tilrette Strings i hver case.
Hvordan lyder opgave teksten?
Henrik Halle skrev:Når jeg kopierer min kode over holder den ikke formateringen. Kan jeg få den til det?
Kopier teksten ind i f.eks notepad++ og kopier det derefter ind imellem kode elementerne.

Det er hvad jeg selv gør, har også rettet alle svar her.

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

Re: Kap 7 øvelse 1 (Et forslag til løsning)

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

cristian skrev:
codegenic skrev:Ved ikke, om jeg har misforstået opgaven, men har grebet det an på følgende måde.
Har brugt concatenate i troen om, at jeg derved sparer tid på at tilrette Strings i hver case.
Hvordan lyder opgave teksten?
Henrik Halle skrev:Når jeg kopierer min kode over holder den ikke formateringen. Kan jeg få den til det?
Kopier teksten ind i f.eks notepad++ og kopier det derefter ind imellem kode elementerne.

Det er hvad jeg selv gør, har også rettet alle indlægs kode format
Opgaven lød som følger: opret en int variabel med en værdi mellem 1 og 10. Få derefter udskrevet hvad værdien er.

Greb den som en switch med cases og tænkte at jeg blot kunne kunne genbruge min int i syso, i stedet for manuelt at anføre tallet der svarer til den case, som efterprøves. Altså, "værdien er ", + mitTal og ikke "værdien er 4". Men ved ikke om det fylder mere i hukommelsen end bare at køre den med strings rent.

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

Re: Kap 7 øvelse 1 (Et forslag til løsning)

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

codegenic skrev: Opgaven lød som følger: opret en int variabel med en værdi mellem 1 og 10. Få derefter udskrevet hvad værdien er.
Så har du løst opgaven som jeg ser det.
1. Du opretter en integer og tildeler den en værdi.
2. Du udskriver din integers værdi.
codegenic skrev: Greb den som en switch med cases og tænkte at jeg blot kunne kunne genbruge min int i syso, i stedet for manuelt at anføre tallet der svarer til den case, som efterprøves. Altså, "værdien er ", + mitTal og ikke "værdien er 4". Men ved ikke om det fylder mere i hukommelsen end bare at køre den med strings rent.
Om du skriver

Kode: Vælg alt

System.out.println("text: " + mitTal);
// eller
System.out.println("text: 1");
Gør ingen forskel i forhold til hvor mange bytes hver string fylder i RAM.

Forskellen i dette scenarie er at i den første sysout laver Java to (2) string objekter da strings er "immutable".
Så når du skriver "text1" + "text2" eller "text1" + mitTal, så laver Java to (2) string objekter for at kunne knytte dem sammen.
Det er ret langsomt, giver et større overhead for GC (garbage collection), bruger flere CPU cycles og fylder mere i RAM.

I den anden sysout laver Java et enkelt string object for at udskrive "text: 1", hvilket er acceptabelt i dette scenarie med et switch statement.

MEN! Hvis du nu skulle udskrive adskillige linjer hvor du ikke skulle kunne se det du udskriver med det samme så er et StringBuilder objekt vejen frem.
StringBuilder laver kun to (2) objekt for hundredevis eller tusindevis af strings via append()

Kode: Vælg alt

StringBuilder sb = new StringBuilder();
sb.append(string 1);
sb.append(string 2);
sb.append(string 3);
sb.append(string 4);
System.out.println(sb);
1. Objekt for StringBuilder
2. Objekt for toString() af StringBuilder

Så forskellen imellem
1: "text: 1"
2: "text: " + mitTal
Er at 2 opretter dobbelt så mange String objekter som 1 og placere dem i RAM, hvilket bruger flere resourcer i både
storage (RAM) og CPU.

Noter. I StringBuilder append skal du selv skrive et linjeskift f.eks

Kode: Vælg alt

String newline = System.getProperty("line.separator");
StringBuilder sb = new StringBuilder();
sb.append(string1);
sb.append(newline);
// eller
sb.append(string2 + newline);
sb.append(string3);
sb.append(string4);
System.out.println(sb);

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

Re: Kap 7 øvelse 1 (Et forslag til løsning)

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

Føler mig meget privilegeret. Tak for den grundige forklaring. Der er ræson i det nu.

Besvar