2017-02-10 3 views
4

Я пытаюсь создать простую рюкзачную программу. Это задание для школы, и я почти закончил, за исключением того, что не могу заменить элемент в своем рюкзаке на новый.C# - Замена элемента в рюкзаке

Мое предположение, почему он может не работать, заключается в том, что я не могу заменить item, потому что он находится в глобальном масштабе, но я понятия не имею, как его исправить. Вот код:

static void Main(string[] args) 
    { 
     bool isRunning = true; 
     while (isRunning) 
     { 
      Console.WriteLine("\n\tWelcome to the backpack!"); 
      Console.WriteLine("\t[1]Add an item"); 
      Console.WriteLine("\t[2]Show contents"); 
      Console.WriteLine("\t[3]Clear contents"); 
      Console.WriteLine("\t[4]Exit"); 
      Console.Write("\tChoose: "); 

      int menyVal = Convert.ToInt32(Console.ReadLine()); 

      string item; 
      item = "Empty space"; 


      switch (menyVal) 
      { 
       case 1: 
        Console.WriteLine("\n\tContents of backpack:"); 
        Console.WriteLine("\n\t" + item); 
        Console.WriteLine("\n\tWhat do you want to replace " + item + " with?"); 
        item = item.Replace(item, Console.ReadLine()); 
        Console.WriteLine("\n\tYou have packed " + item + " in your backpack"); 
        break; 
       case 2: 
        Console.WriteLine("\n\tContents of backpack:"); 
        Console.WriteLine("\n\t" + item); 
        Console.WriteLine("\n\tPress any key..."); 
        Console.ReadKey(); 
        break; 
       case 3: 
        item = "Tom plats"; 
        Console.WriteLine("\n\tYou have emptied the backpack!"); 
        break; 
       case 4: 
        isRunning = false; 
        break; 
       default: 
        Console.WriteLine("Incorrect input!"); 
        break; 
      } 
     } 
    } 

Любые идеи о том, как исправить это? Советы очень ценятся! Спасибо!

+0

Вы пробовали отладки кода, чтобы увидеть, что на самом деле происходит? Пройдите через каждую строку и наблюдайте за переменными. –

+0

Когда вы нажимаете 1 в меню, пользователю предлагается ввести то, что должно заменить строку, хранящуюся в «элементе». Однако он не совпадает с первым объявлением «Пустое пространство». – dumfuq

+1

Поскольку 'item' является просто строкой, вы можете назначить его просто' item = Console.ReadLine(); 'вместо использования' item.Replace(); ' –

ответ

3

Переместить назначение

string item; 
item = "Empty space"; 

Перед циклом.

Прямо сейчас, каждый раз, когда вы зацикливаете, вы перезаписываете значение элемента.

Вот как весь код будет выглядеть после изменения:

static void Main(string[] args) 
    { 
     bool isRunning = true; 
     string item = "Empty space"; 

     while (isRunning) 
     { 
      Console.WriteLine("\n\tWelcome to the backpack!"); 
      Console.WriteLine("\t[1]Add an item"); 
      Console.WriteLine("\t[2]Show contents"); 
      Console.WriteLine("\t[3]Clear contents"); 
      Console.WriteLine("\t[4]Exit"); 
      Console.Write("\tChoose: "); 

      int menyVal = Convert.ToInt32(Console.ReadLine()); 

      switch (menyVal) 
      { 
       case 1: 
        Console.WriteLine("\n\tContents of backpack:"); 
        Console.WriteLine("\n\t" + item); 
        Console.WriteLine("\n\tWhat do you want to replace " + item + " with?"); 
        item = Console.ReadLine()); 
        Console.WriteLine("\n\tYou have packed " + item + " in your backpack"); 
        break; 
       case 2: 
        Console.WriteLine("\n\tContents of backpack:"); 
        Console.WriteLine("\n\t" + item); 
        Console.WriteLine("\n\tPress any key..."); 
        Console.ReadKey(); 
        break; 
       case 3: 
        item = "Tom plats"; 
        Console.WriteLine("\n\tYou have emptied the backpack!"); 
        break; 
       case 4: 
        isRunning = false; 
        break; 
       default: 
        Console.WriteLine("Incorrect input!"); 
        break; 
      } 
     } 
    } 
+0

Большое вам спасибо! Я знал, что это будет что-то простое, что я забыл. Полностью забыл, что я был вложен в цикл while. * doh – dumfuq

+0

'item = item.Replace (item, Console.ReadLine());' все еще ненужно; просто asign 'item = Console.ReadLine());' –

+0

@JoshPart действительно, спасибо, я изменил его. – Gilles

Смежные вопросы