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

Indlæg af Henrik Halle » 10. maj 2014, 18:44

Den var også til at finde ud af. :)

Kode: Vælg alt

public class Main {
// funktioner
	static int multi(int x, int y){
	return x*y;
	}	
	
	static int multi(int x, int y, int z ){
	return multi(x,y)*z;}
	
	static int multi(int a, int b, int c, int d){
		return multi(a,b,c)*d;
	}
// Programudførelse
	
	public static void main(String[] args) {
		System.out.println( multi( 17, 5));
		System.out.println(multi(17,5,10));
		System.out.println(multi(17,5,10,10));
		
		
	}

MarkAndersson
Begynder
Indlæg: 1
Tilmeldt: 24. sep 2015, 14:26

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

Indlæg af MarkAndersson » 24. sep 2015, 14:36

Ja den var ret nem, endelig noget jeg også havde nemt ved :-)
Jeg prøver at lave nogle betingelser for hvilke System.out kommandoer der skal udskrives. I min if statement skal jeg taste (gange(1,2)*gange(1,2,3) for at få det til at virke. Kan man gøre det med mindre kode mon?

Kode: Vælg alt

public static void main(String[] args)
        {
             
                if (gange(1,2)*gange(1,2,3)<100)
            System.out.println("(1*2)*(1*2*3)=" +gange(1,2)*gange(1,2,3));
                else 
            System.out.println("(19*6)*(1*2*3)=" +gange(19,6)*gange(3,5,8));
        }
        public static int gange(int x, int y)
        {
            return x*y;
        }
        public static int gange(int x, int y, int z)
        {
            return gange(x,y)*z; 
        }

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

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

Indlæg af cristian » 27. sep 2015, 22:32

@MarkAndersson er det noget i den her stil du tænker på?

Kode: Vælg alt

public class Main {

	static void add(int a, int b) {
		System.out.println("(" + a + " * " + b + ") = " + (a + b));
	}
	
	public static void main(String[] args) {	
		add(1,2);
	}
}
Output
(1 * 2) = 3
Om der er en Java klasse et sted (måske math) der kan printe hvordan man opnår et givet resultat ved jeg ikke lige. Det vil ikke forbavse mig hvis der var.

jepperask
Geni
Geni
Indlæg: 378
Tilmeldt: 4. nov 2012, 17:57

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

Indlæg af jepperask » 29. sep 2015, 00:39

MarkAndersson skrev:Ja den var ret nem, endelig noget jeg også havde nemt ved :-)
Jeg prøver at lave nogle betingelser for hvilke System.out kommandoer der skal udskrives. I min if statement skal jeg taste (gange(1,2)*gange(1,2,3) for at få det til at virke. Kan man gøre det med mindre kode mon?
EDIT: Kan godt være jeg har misforstået hvad du egentlig spørger om, men nu står det her ihvertfald. :-P

Hvorvidt du kan formindske dine kald, ved jeg ikke - men lige i dit tilfælde dér, kan du jo lave en metode der uanset antal kan gange det hele sammen.
Husk reglerne for gange - rækkefølgen er ligegyldig. Så om du laver konstruktører til hvert tilfælde, og gange deres resultater sammen - eller om du bare ganger alle "5" tal sammen, giver det samme:

Kode: Vælg alt

public static void main(String[] args) {
		System.out.println("(1*2)*(1*2*3)=" +multiply(new int[]{1,2,3,1,2}));
		System.out.println("(1*2)*(1*2*3)=" +gange(1,2)*gange(1,2,3));
	}
	
	public static int multiply(int[] numbers) {
		int output = 1;
		for (int i = 0; i < numbers.length; i++) {
			output = output * numbers[i];
		}
		return output;
	}
	 public static int gange(int x, int y)
        {
            return x*y;
        }
        public static int gange(int x, int y, int z)
        {
            return gange(x,y)*z; 
        }
	
Output:

Kode: Vælg alt

(1*2)*(1*2*3)=12
(1*2)*(1*2*3)=12
Umiddelbart er koden ikke kortere - men overvej fleksibiliteten af, at du kan indsætte lige hvad du vil, og det bliver stadig ganget; med én metode. Omvendt skulle du lave en kontruktør til hver eneste antal gangestykker, eller lave kombinationer af dine allerede eksisterende metoder.

Alternativt er der varargs:

Kode: Vælg alt

public static void main(String[] args) {
		System.out.println("(1*2)*(1*2*3)=" +multiply(1,2,3,1,2));
	}
	
	public static int multiply(Integer... args) {
		int output = 1;
		for (int i : args) {
			output = output * i;
		}
		return output;
	}

Besvar