Vinnaren i pepparkakshustävlingen!
2018-03-13, 21:14
  #7141
Moderator
Protons avatar
Citat:
Ursprungligen postat av Boven541
Naturliga tal kan sägas vara heltal som inte är negativa. Skriv en klass N för naturliga tal med följande innehåll och funktion:

public Nat(int n) skapar ett naturligt tal med värdet n. Om n<0 ska undantaget IllegalArgumentException kastas.

public Nat add(Nat n) ger summan av det naturliga talet och n.

Kod:
public class Nat {
	private Integer temp;
	public Nat(int n) {
		if(n<0) {
			throw new IllegalArgumentException();
		}
		else {
			this.temp = n;
		}
		
	}
	public Nat add(Nat n) {

	}

Vet inte ens om jag förstår uppgiften men kan jag casta om en Integer till ett Nat objekt? Hur hade ni skrivit metoden public Nat add(Nat n)?
Varför använder du integer-klassen när en vanlig int kommer klara av jobbet galant till att börja med?

Det ser ut som om du skulle behöva nån stödmetod i din Nat-klass, typ en getInnerValue eller så som för returnera den int som klassen wrappar, annars kommer du inte åt detta tal i add-metoden.

Sen är det ju bara att lägga ihop talen och returnera this så borde du vara hemma.
Citera
2018-03-13, 21:23
  #7142
Medlem
Citat:
Ursprungligen postat av Proton
Varför använder du integer-klassen när en vanlig int kommer klara av jobbet galant till att börja med?

Det ser ut som om du skulle behöva nån stödmetod i din Nat-klass, typ en getInnerValue eller så som för returnera den int som klassen wrappar, annars kommer du inte åt detta tal i add-metoden.

Sen är det ju bara att lägga ihop talen och returnera this så borde du vara hemma.

Tänkte att man kunde casta om en Integer till ett objekt, men inte en int. Nat är väll ett objekt? Men det gick ju ändå inte så

På det fetstilade, förstår jag nästan ingenting. vad menar du med "den int som klassen wrappar"?
Citera
2018-03-14, 07:05
  #7143
Moderator
Protons avatar
Citat:
Ursprungligen postat av Boven541
Tänkte att man kunde casta om en Integer till ett objekt, men inte en int. Nat är väll ett objekt? Men det gick ju ändå inte så

På det fetstilade, förstår jag nästan ingenting. vad menar du med "den int som klassen wrappar"?
Nat är en klass, instanser av denna klass är dess objekt.

Det jag menade var ju att du på nåt sätt utifrån måste kunna läsa av den int som finns i din klass Nat, annars kommer det bli extremt svårt att använda klassen i fråga.

Du har ju en (privat) int i Nat-klassen, add-metoden skickar in en annan Nat som således innehåller en annan privat int. Hur ska du göra för att få reda på denna Nats värde?
Citera
2018-03-14, 11:06
  #7144
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av Boven541
Naturliga tal kan sägas vara heltal som inte är negativa. Skriv en klass N för naturliga tal med följande innehåll och funktion:

public Nat(int n) skapar ett naturligt tal med värdet n. Om n<0 ska undantaget IllegalArgumentException kastas.

public Nat add(Nat n) ger summan av det naturliga talet och n.

Kod:
public class Nat {
	private Integer temp;
	public Nat(int n) {
		if(n<0) {
			throw new IllegalArgumentException();
		}
		else {
			this.temp = n;
		}
		
	}
	public Nat add(Nat n) {

	}

Vet inte ens om jag förstår uppgiften men kan jag casta om en Integer till ett Nat objekt? Hur hade ni skrivit metoden public Nat add(Nat n)?

Integer temp är inte särskilt temporär, alltså är namnet dumt. Den innehåller objektets enda värde och bör ha ett namn som speglar det.
Sedan verkar det onödigt att inte använda en vanlig int. Generellt sett ska/bör sådana saker (hur ditt objekt ser ut på insidan) hållas privata. Så för det man vill ska vara åtkomligt skapar man get-metoder, som, lite överkurs, inte returnerar en referens som låter någon på utsidan manipulera värdet (enkelt uttryckt, skapa en kopia som returneras).

Nat add(Nat n):
ungefär
return new Nat(this.getValue() + n.getValue())
där
public int getValue()
beskrivs tidigare i inlägget.

Fast frågan är vad add-metoden ska göra. Ska den skapa en summa-Nat av två Nat eller plussa på värdet i en befintlig Nat?
Citera
2018-03-14, 22:04
  #7145
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av Neksnor
Fast frågan är vad add-metoden ska göra. Ska den skapa en summa-Nat av två Nat eller plussa på värdet i en befintlig Nat?
Jag tolkar "public Nat add(Nat n) ger summan av det naturliga talet och n" som att det ska addera två Nat, den som anropas och argumentet, och sedan returnera en ny.
Ett lite konstigt beteende tycker jag, jämför med att talet 13 anropar talet 48s additionsfunktion och man får det nya talet 61. Känns mer naturligt att ha metoden

public static Nat add(Nat a, Nat b)

samt metoden

public void incrNat(Nat n)

som justerar den ena Natens värde.
Citera
2018-03-15, 20:43
  #7146
Medlem
Despats avatar
Hej, går det att få en metod att bestå av andra metoder? Dvs att return value returnar flera andra metoder?
Citera
2018-03-15, 21:06
  #7147
Moderator
Protons avatar
Citat:
Ursprungligen postat av Despat
Hej, går det att få en metod att bestå av andra metoder? Dvs att return value returnar flera andra metoder?
Java har inte stöd för några funkionspekare eller delegater, så nej, du kan inte skapa en metod för att returnera en metod, däremot kan du såklart chaina ihop metodanrop så att returvärdet från en metod blir input till en annan.

Vad är det du vill göra egentligen som gör att du vill ta till sådana här bisarra åtgärder?
Citera
2018-03-15, 21:07
  #7148
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av Despat
Hej, går det att få en metod att bestå av andra metoder? Dvs att return value returnar flera andra metoder?
Tror inte det (men någon länk antydde att det gick att göra), men det hela handlar om något som kallas "higher order functions" (borde vara "methods") och handlar ungefär om att funktioner kan skickas som argument och returneras som vilka andra värden som helst. Populärt inom funktionell programmering. Se även https://en.wikipedia.org/wiki/First-class_citizen
Citera
2018-03-15, 21:25
  #7149
Medlem
Citat:
Ursprungligen postat av Proton
Java har inte stöd för några funkionspekare eller delegater, så nej, du kan inte skapa en metod för att returnera en metod, däremot kan du såklart chaina ihop metodanrop så att returvärdet från en metod blir input till en annan.

Vad är det du vill göra egentligen som gör att du vill ta till sådana här bisarra åtgärder?

I wikipedia står att Java delvis har stöd för högre ordningens funktioner i alla fall.

https://en.wikipedia.org/wiki/Higher...on#Java_(1.8+)
__________________
Senast redigerad av Hominem 2018-03-15 kl. 21:35.
Citera
2018-03-15, 21:28
  #7150
Moderator
Protons avatar
Citat:
Ursprungligen postat av Neksnor
Tror inte det (men någon länk antydde att det gick att göra), men det hela handlar om något som kallas "higher order functions" (borde vara "methods") och handlar ungefär om att funktioner kan skickas som argument och returneras som vilka andra värden som helst. Populärt inom funktionell programmering. Se även https://en.wikipedia.org/wiki/First-class_citizen

Citat:
Ursprungligen postat av Hominem
I wikipedia står att Java delvis har stöd för högre ordningens funktioner i alla fall.

https://en.wikipedia.org/wiki/Higher...ion#Java_(1.8+)
Se där, det där kände jag inte riktigt till, visste bara om att java hade fått in lambdauttryck i språket.

I stand corrected alltså. Frågan är dock fortfarande varför snubben vill göra en sådan manöver i första läget.
Citera
2018-03-21, 20:51
  #7151
Medlem
Despats avatar
Tack för svaret när det gäller metoderna.

Har en viktig fråga just nu, hur får man en fråga att upprepa sig oändligt? Alltså att man i princip kan svara på frågan om och om igen? Har försökt lösa det och har googlat omkring men hittar ingenting. Försöker sätta upp nästlade loopar med while och if men det funkar inte.. Det jag i princip försöker göra är detta.

Kod:
 while (scan.next().equals("E"))
        {System.out.println(fuelEU);
        System.out.println("Vill du byta metod eller avbryta processen? Skriv avbryt eller den korrekta bokstaven (E/U).");
        scan.next();
        
        if(scan.next().equals("E"))
        System.out.println("Bränsleförbrukningen är i liter/100 km:" + fuelEU);
        
        if(scan.next().equals("U"))
        System.out.println("Bränsleförbrukningen är i gallons/mile:" + fuelUS);
            
        if(scan.next().equals("Avbryt")|| scan.next().equals("avbryt"))
        System.exit(0);
        System.out.println("Vill du byta metod eller avbryta processen? Skriv avbryt eller den korrekta bokstaven (E/U).");
        scan.next();
Citera
2018-03-21, 21:31
  #7152
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av Despat
Tack för svaret när det gäller metoderna.

Har en viktig fråga just nu, hur får man en fråga att upprepa sig oändligt? Alltså att man i princip kan svara på frågan om och om igen? Har försökt lösa det och har googlat omkring men hittar ingenting. Försöker sätta upp nästlade loopar med while och if men det funkar inte.. Det jag i princip försöker göra är detta.

Kod:
 while (scan.next().equals("E"))
        {System.out.println(fuelEU);
        System.out.println("Vill du byta metod eller avbryta processen? Skriv avbryt eller den korrekta bokstaven (E/U).");
        scan.next();
        
        if(scan.next().equals("E"))
        System.out.println("Bränsleförbrukningen är i liter/100 km:" + fuelEU);
        
        if(scan.next().equals("U"))
        System.out.println("Bränsleförbrukningen är i gallons/mile:" + fuelUS);
            
        if(scan.next().equals("Avbryt")|| scan.next().equals("avbryt"))
        System.exit(0);
        System.out.println("Vill du byta metod eller avbryta processen? Skriv avbryt eller den korrekta bokstaven (E/U).");
        scan.next();
Inför varje nytt varv i en whilesats utvärderas villkoret. Om det är sant så körs ett varv till innan ny utvärdering. Så ange ett villkor som alltid är sant.
Exempelvis
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback