Permalänk

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?

Permalänk
Medlem

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.

Visa signatur

Huvudriggen är en Gigabyte Aorus Xtreme | 128gb DDR5 6000 | Ryzen 7950X | 3080Ti
Utöver det är det för många datorer, boxar och servar för att lista :P

Permalänk
Medlem
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.

Permalänk
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

Permalänk
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!

Permalänk
Medlem
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.

Permalänk
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?

Permalänk
Medlem
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.

Permalänk
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!

Permalänk
Medlem
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); }

Permalänk
Medlem
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

Permalänk

@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!

Permalänk
Medlem

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

Permalänk
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!!

Permalänk
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!!

Permalänk
Medlem