Trädvy Permalänk
Medlem
Registrerad
Apr 2016

Programmeringshjälp

Först jag vill att säga att jag är inte svensk man så där kan bli många fel med texten

Min uppgift är
Veckans inlämningsuppgift bygger på programmeringsuppgift 16.5
Konstruera en klass räknare som räknar upp eller ned ett heltal som bara får anta värden inom ett visst intervall. När man initierar en räknare dvs. skapar ett objekt av klassen räknare ska man kunna ange ett startvärde och minsta och största värde räknaren ska kunna anta (använd konstruktor). Det ska finnas metoder med vilka man kan öka och minska en räknare med 1.

Svar för programmeringsuppgift 16.5 är

public class Raknare { private int värde, min, max; public Raknare(int minsta, int största, int startvärde) { min = minsta; max = största; sättVärde(startvärde); } public void sättVärde(int nyttVärde) { if (nyttVärde < min || nyttVärde > max) throw new IllegalArgumentException("Felaktigt värde i räknare"); else värde = nyttVärde; } public int avläsVärde() { return värde; } public void öka() { sättVärde(värde+1); } public void minska() { sättVärde(värde-1); } }

så jag tänkte att använda det för konstruktor och instansmetod och programmerade så

package kapitel16_inlämningsuppgift_package; public class Räknare{ public static void main (String[] arg){ Räknare2_ s1 = new Räknare2_(); s1.sättVärde(nyttvärde); System.out.println(); } } //**************** class Räknare2_ { private int värde, min, max; public void Räknare2_(int minsta, int största, int startvärde) { min = minsta; max = största; sättVärde(startvärde); } public void sättVärde(int nyttVärde) { if (nyttVärde < min || nyttVärde > max) throw new IllegalArgumentException("Felaktigt värde i räknare"); else värde = nyttVärde; } public int avläsVärde() { return värde; } public void öka() { sättVärde(värde+1); } public void minska() { sättVärde(värde-1); } }

Men min Netbeans visar cannot find symbol "nyttvärde" på

" s1.sättVärde(nyttvärde);" och visar tre varianter att lösa

1. Create local variable "nyttvärde"
2. Create field "nyttvärde" in kapitel16_inlämningsuppgift_package.Räknare
3. Create parameter "nyttvärde"

Men förstår inte varför visar warning när jag har redan gjort konstruktor.
Kan ni hjälpa mig vad måste jag göra för att fixa det?
Och kan ni se något annat fel?

Trädvy Permalänk
Medlem
Plats
Karlskrona
Registrerad
Aug 2009

I din main funktion så skapar du aldrig variabeln nyttVärde. När du sedan försöker använda den som parameter till funktionen sättVärde i s1 så klagar systemet då den inte finns.

Asus Z97 Pro Gamer | 32gb ram DDR3 2400MHz | i7 4790k | 2 x R9 390
Asrock P67 Extreme4 rev3 | 16gb DDR3 2400MHz | i7 2600K | R9 290
En massa bärbara, servrar, RPi's och andra boxar

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av ProgrammeringElev:

Först jag vill att säga att jag är inte svensk man så där kan bli många fel med texten

Min uppgift är
Veckans inlämningsuppgift bygger på programmeringsuppgift 16.5
Konstruera en klass räknare som räknar upp eller ned ett heltal som bara får anta värden inom ett visst intervall. När man initierar en räknare dvs. skapar ett objekt av klassen räknare ska man kunna ange ett startvärde och minsta och största värde räknaren ska kunna anta (använd konstruktor). Det ska finnas metoder med vilka man kan öka och minska en räknare med 1.

Svar för programmeringsuppgift 16.5 är

public class Raknare {
private int värde, min, max;

public Raknare(int minsta, int största, int startvärde) {
min = minsta;
max = största;
sättVärde(startvärde);
}

public void sättVärde(int nyttVärde) {
if (nyttVärde < min || nyttVärde > max)
throw new IllegalArgumentException("Felaktigt värde i räknare");
else
värde = nyttVärde;
}

public int avläsVärde() {
return värde;
}

public void öka() {
sättVärde(värde+1);
}

public void minska() {
sättVärde(värde-1);
}
}

så jag tänkte att använda det för konstruktor och instansmetod och programmerade så

package kapitel16_inlämningsuppgift_package;

public class Räknare{

public static void main (String[] arg){
Räknare2_ s1 = new Räknare2_();

s1.sättVärde(nyttvärde);
System.out.println();

}
}
//****************
class Räknare2_ {
private int värde, min, max;

public void Räknare2_(int minsta, int största, int startvärde) {
min = minsta;
max = största;
sättVärde(startvärde);
}

public void sättVärde(int nyttVärde) {
if (nyttVärde < min || nyttVärde > max)
throw new IllegalArgumentException("Felaktigt värde i räknare");
else
värde = nyttVärde;
}

public int avläsVärde() {
return värde;
}

public void öka() {
sättVärde(värde+1);
}

public void minska() {
sättVärde(värde-1);
}
}

Men min Netbeans visar cannot find symbol "nyttvärde" på

" s1.sättVärde(nyttvärde);" och visar tre varianter att lösa

1. Create local variable "nyttvärde"
2. Create field "nyttvärde" in kapitel16_inlämningsuppgift_package.Räknare
3. Create parameter "nyttvärde"

Men förstår inte varför visar warning när jag har redan gjort konstruktor.
Kan ni hjälpa mig vad måste jag göra för att fixa det?
Och kan ni se något annat fel?

Använd gärna kod taggarna, svårt att läsa koden annars. Vad jag kan se har du inte deklarerat variabeln nyttvärde, det är därför Netbeans inte kan hitta den.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av inquam:

I din main funktion så skapar du aldrig variabeln nyttVärde. När du sedan försöker använda den som parameter till funktionen sättVärde i s1 så klagar systemet då den inte finns.

Tack för ditt svar! Jag ska testa när jag är hem

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av Baxtex:

Använd gärna kod taggarna, svårt att läsa koden annars. Vad jag kan se har du inte deklarerat variabeln nyttvärde, det är därför Netbeans inte kan hitta den.

Tack så mycket för ditt svar!

Trädvy Permalänk
Medlem
Registrerad
Jul 2012
Skrivet av inquam:

I din main funktion så skapar du aldrig variabeln nyttVärde. När du sedan försöker använda den som parameter till funktionen sättVärde i s1 så klagar systemet då den inte finns.

Nu är jag katastrof dålig på programmering men det verkar stämma bra det inquam säger.
Du behöver deklarerar(skapa) variabeln nyttvärde. Tex, int nyttvärde = 10;
Annars får du skapa en variabel "nyttvärde" som tar input från användaren.

Sen tror jag det behövs lite justeringar för min & max värde.

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av bergann:

Nu är jag katastrof dålig på programmering men det verkar stämma bra det inquam säger.
Du behöver deklarerar(skapa) variabeln nyttvärde. Tex, int nyttvärde = 10;
Annars får du skapa en variabel "nyttvärde" som tar input från användaren.

Sen tror jag det behövs lite justeringar för min & max värde.

Vilka justeringar menar du?
Måste jag skriva vad är minst tal och störst tal?

Trädvy Permalänk
Medlem
Registrerad
Jul 2012
Skrivet av ProgrammeringElev:

Vilka justeringar menar du?
Måste jag skriva vad är minst tal och störst tal?

Om jag förstod uppgiften rätt stod det "ska man kunna ange ett startvärde och minsta och största "
I din kod ser jag inte vart man ska ange dessa värden. Men jag kan ha fel.
Jag är själv väldigt ny inom programmering, har bara läst A-kursen på distans.

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av bergann:

Om jag förstod uppgiften rätt stod det "ska man kunna ange ett startvärde och minsta och största "
I din kod ser jag inte vart man ska ange dessa värden. Men jag kan ha fel.
Jag är själv väldigt ny inom programmering, har bara läst A-kursen på distans.

Tack så mycket för din respons!

Trädvy Permalänk
Medlem
Registrerad
Mar 2016
Skrivet av ProgrammeringElev:

så jag tänkte att använda det för konstruktor och instansmetod och programmerade så

package kapitel16_inlämningsuppgift_package; public class Räknare{ public static void main (String[] arg){ Räknare2_ s1 = new Räknare2_(); s1.sättVärde(nyttvärde); System.out.println(); } } //**************** class Räknare2_ { private int värde, min, max; public void Räknare2_(int minsta, int största, int startvärde) { min = minsta; max = största; sättVärde(startvärde); } public void sättVärde(int nyttVärde) { if (nyttVärde < min || nyttVärde > max) throw new IllegalArgumentException("Felaktigt värde i räknare"); else värde = nyttVärde; } public int avläsVärde() { return värde; } public void öka() { sättVärde(värde+1); } public void minska() { sättVärde(värde-1); } }

Jag gissar att du försöker göra en klass (Räknare2_) som ska innehålla tre fält av typen int, (värde, min, max) och några funktioner som ska manipulera dessa värden.

I denna klass har du nu skapat en metod som inte returnerar någonting (void) vilket gör att du inte kan instansiera klassen som du önskar:

public void Räknare2_(int minsta, int största, int startvärde) { min = minsta; max = största; sättVärde(startvärde); }

Du vill istället göra en konstruktor:

public Räknare2_(int minsta, int största, int startvärde) { min = minsta; max = största; sättVärde(startvärde); }

Detta kommer resultera i ett nytt objekt av denna klass när du använder "new".
Eftersom du saknar en parameterlös konstruktor i din klass behöver du skriva in värden i samband med skapandet av denna klass, alltså:

public static void main (String[] arg) { Räknare2_ s1 = new Räknare2_(0, 10, 1); int nyttvärde = 3; s1.sättVärde(nyttvärde); }

Trädvy Permalänk
Medlem
Registrerad
Jul 2012
Skrivet av huff:

public static void main (String[] arg) { Räknare2_ s1 = new Räknare2_(0, 10, 1); int nyttvärde = 3; s1.sättVärde(nyttvärde); }

Kanonbra förklaring!
I det här fallet betyder följande

Räknare2_ s1 = new Räknare2_(0, 10, 1);

0 = Minsta
10 = Största
1 = Startvärde

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

@bergannm, @huff:

Tack så mycket!!
Gjorde så hur har du skrivit
Det visar inget warning i koden, men när jag kör koden med skift+f6, i Output visar ingenting
Visar bara

run:

BUILD SUCCESSFUL (total time : 0 seconds)

Men tack så mycket för ditt svar! Jag ska prova att lösa det!

Trädvy Permalänk
Medlem
Registrerad
Mar 2016

Du gör ju inte annat än skapar klassen och sätter ett värde. Vill du skriva ut något värde (något av dina int-fält) från klassen måste du göra dem publika och sedan ropa på exempelvis s1.minsta. Om du vill komma åt detta utan att göra fälten publika kan du göra en publik metod som returnerar det värde du vill skriva ut.

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av huff:

Du gör ju inte annat än skapar klassen och sätter ett värde. Vill du skriva ut något värde (något av dina int-fält) från klassen måste du göra dem publika och sedan ropa på exempelvis s1.minsta. Om du vill komma åt detta utan att göra fälten publika kan du göra en publik metod som returnerar det värde du vill skriva ut.

Skickades från m.sweclockers.com

TACK SÅ JÄTTEMYCKET!!

Trädvy Permalänk
Medlem
Registrerad
Apr 2016
Skrivet av inquam:

I din main funktion så skapar du aldrig variabeln nyttVärde. När du sedan försöker använda den som parameter till funktionen sättVärde i s1 så klagar systemet då den inte finns.

Skrivet av Baxtex:

Använd gärna kod taggarna, svårt att läsa koden annars. Vad jag kan se har du inte deklarerat variabeln nyttvärde, det är därför Netbeans inte kan hitta den.

Skrivet av bergann:

Nu är jag katastrof dålig på programmering men det verkar stämma bra det inquam säger.
Du behöver deklarerar(skapa) variabeln nyttvärde. Tex, int nyttvärde = 10;
Annars får du skapa en variabel "nyttvärde" som tar input från användaren.

Sen tror jag det behövs lite justeringar för min & max värde.

Skrivet av huff:

Jag gissar att du försöker göra en klass (Räknare2_) som ska innehålla tre fält av typen int, (värde, min, max) och några funktioner som ska manipulera dessa värden.

I denna klass har du nu skapat en metod som inte returnerar någonting (void) vilket gör att du inte kan instansiera klassen som du önskar:

public void Räknare2_(int minsta, int största, int startvärde) { min = minsta; max = största; sättVärde(startvärde); }

Du vill istället göra en konstruktor:

public Räknare2_(int minsta, int största, int startvärde) { min = minsta; max = största; sättVärde(startvärde); }

Detta kommer resultera i ett nytt objekt av denna klass när du använder "new".
Eftersom du saknar en parameterlös konstruktor i din klass behöver du skriva in värden i samband med skapandet av denna klass, alltså:

public static void main (String[] arg) { Räknare2_ s1 = new Räknare2_(0, 10, 1); int nyttvärde = 3; s1.sättVärde(nyttvärde); }

Skrivet av ProgrammeringElev:

TACK SÅ JÄTTEMYCKET!!

Tack för alla!!! Fick A på inlämningsuppgiften!!

Trädvy Permalänk
Medlem
Registrerad
Jul 2012