Get & set sparar inte när jag trycker ut det i consolen? C#

Permalänk
Medlem

Get & set sparar inte när jag trycker ut det i consolen? C#

Ive been trying for hours to fix this code I just can't seem to understand the problem, I'm storing a variable with get and set inside of a public containing a case. What I'm trying to do is use this menu below to store the variable.

Detta är kodat i C# visualstudios

``` public void VolumeControl() { Volume vol = new Volume(); Console.WriteLine("\n ---------------\n" + " |>>>>> Control Panel <<<<<|\n" + " ---------------" + "\n\n |===========================================|\n" + "\n Press key...\n" + "\n [Q] to Change M Main 1 Volume\n" + " [W] to Change M Main 2 Volume\n" + " [E] to Change Host Volume\n" + " [R] to Change Guest Volume\n" + " [T] to Change Speaker Volume\n" + " [Y] to Change Lights\n" + " [G] to exit\n" + "\n |===========================================|"); ConsoleKeyInfo inputuser = Console.ReadKey(true); switch (inputuser.Key) { case ConsoleKey.Q: { try { Console.WriteLine("| | |Input Volume percentege from 0-100 %| | |"); vol.MainMic1 = int.Parse(Console.ReadLine()); if (vol.MainMic1 > 100 || vol.MainMic1 < 0) { Console.WriteLine("Invalid Number"); Console.ReadKey(); } else if (vol.MainMic1 == 0 || vol.MainMic1 <= 100) Console.WriteLine(vol.MainMic1); Console.ReadKey();

```
This sets it in this current method because I tried it but not in the method I use to call it, when I call it in console it returns its original value or 0

public void ShowVolume() { Volume voll = new Volume(); Console.Clear(); Console.WriteLine("|====== ====== ====== ====== ====== ====== ======|\n" + "\n >>>>> Lights and Volume settings <<<<<\n" + "\nMain 1(Peterson) Microphone currently at: {0}% volume.\n" + "Co-Speaker(Weiss) Microphone currently at: {1}% volume.\n" + "Host Microphone currently at: {2}% volume.\n" + "Guest Microphone currently at: {3}% volume.\n" + "Quad-Speakers currently at: {4}% volume.\n" + "Lights are at: {5}% power.\n" + "\n|====== ====== ====== ====== ====== ====== ======|", voll.MainMic1, voll.MainMic2, voll.MainMic3, voll.GuestMic, voll.QuadSpeaker, voll.Lighting); Console.ReadKey();

I can't figure out the problem, I get everything to run, but not to print what is asked, is there some sort of case /method blockage here I don't understand?
```

here is class with get/set

public class Volume { private int o_mainmic1 = 50; private int o_mainmic2 = 50; private int o_mainmic3 = 50; private int o_guestmic = 30; private int o_quadspeaker = 30; private int o_lighting = 30; public int MainMic1 { get { return o_mainmic1; } set { o_mainmic1 = value; } }

Here are some Gyazo pictures if that is of help to you, I appreaciate any assistance I get here, thanks in advance.

https://gyazo.com/d241e1f8db821ba38415ecf1c57fb3f9

https://gyazo.com/35f31140568794aa41ee74c8ead2296a

https://gyazo.com/1359b4a291baa385b8dcee586a3b97ea

https://gyazo.com/1ce9e237fdd56a7f1a40dabd24c50b5a ```

Permalänk
Medlem

Flytta upp Volume vol = new Volume(); högst upp i klassen som du jobbar i så ska du se att det blir bättre. Du skapar nämligen just nu ett nytt objekt i dina funktioner, vilket gör att ingen data kommer finnas (du skapar ju ett NYTT objekt - inte återanvänder en tidigare instans)

Förklaring nedan med exempelkod som liknar det du gör just nu:

public class Test { public void A() { // Skapar ett nytt objekt för denna funktion. Objektet finns inte utanför funktionens "scope". var testObject = new TestObject(); testObject.Exempel = "Testar"; } public void B() { // Ett nytt objekt skapas. Tidigare värden från A() finns alltså inte. var testObject = new TestObject(); // Skriver ut en tom sträng. Console.WriteLine(testObject.Exempel) } }

Det du då istället vill göra är följande:

public class Test { // Skapar ett objekt som kan användas av hela klassen public TestObject testObject { get; set; } public void A() { testObject.Exempel = "Testar"; } public void B() { // Skriver ut "Testar" Console.WriteLine(testObject.Exempel); } }

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz

Permalänk
Medlem
Skrivet av Pamudas:

Flytta upp Volume vol = new Volume(); högst upp i klassen som du jobbar i så ska du se att det blir bättre. Du skapar nämligen just nu ett nytt objekt i dina funktioner, vilket gör att ingen data kommer finnas (du skapar ju ett NYTT objekt - inte återanvänder en tidigare instans)

Förklaring nedan med exempelkod som liknar det du gör just nu:

public class Test { public void A() { // Skapar ett nytt objekt för denna funktion. Objektet finns inte utanför funktionens "scope". var testObject = new TestObject(); testObject.Exempel = "Testar"; } public void B() { // Ett nytt objekt skapas. Tidigare värden från A() finns alltså inte. var testObject = new TestObject(); // Skriver ut en tom sträng. Console.WriteLine(testObject.Exempel) } }

Det du då istället vill göra är följande:

public class Test { // Skapar ett objekt som kan användas av hela klassen public TestObject testObject { get; set; } public void A() { testObject.Exempel = "Testar"; } public void B() { // Skriver ut "Testar" Console.WriteLine(testObject.Exempel); } }

Jag förstår inte riktigt hur du menar, vill du att jag ska lägga till Volume vol = new Volume(); i klassen? när jag gör det försvinner vol ur metoden som kallar klassen och jag får massa felmeddelanden.

kolla här:

https://gyazo.com/321b3862f79186238ec6164becc31dda

Kan du kanske använda liknande termer så kanske jag förstår enklare haha.xP

Hela iden är att byta volym på en mikrofon, helt teoretiskt för ett projektarbete, så att definera en variabel mellan 0-100 (%) för att sedan kalla på det, hamnat lite i en grop här

Permalänk
Medlem
Skrivet av Xamer95:

Jag förstår inte riktigt hur du menar, vill du att jag ska lägga till Volume vol = new Volume(); i klassen? när jag gör det försvinner vol ur metoden som kallar klassen och jag får massa felmeddelanden.

kolla här:

https://gyazo.com/321b3862f79186238ec6164becc31dda

Kan du kanske använda liknande termer så kanske jag förstår enklare haha.xP

Hela iden är att byta volym på en mikrofon, helt teoretiskt för ett projektarbete, så att definera en variabel mellan 0-100 (%) för att sedan kalla på det, hamnat lite i en grop här

Klassen som dina funktioner befinner sig i. Du har inte visat all kod så mer än så kan jag inte ge

Alltså, filen som innehåller dina funktioner för att hantera volymen, lägg ditt Volume-objekt högst upp.

public class ###### { // Skapar ett objekt som kan användas av hela klassen Volume vol { get; set; } = new Volume(); ... public void VolumeControl() { // Använd vol som deklarerats ovan ... } public void ShowVolume() { // Använd vol som deklarerats ovan ... } }

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz