Member 14637431 Ответов: 2

Не существует аргумента, соответствующего формальному параметру


Я получаю несколько "нет аргумента, который соответствует формальным ошибкам параметров, и я не могу понять, почему. Большинство из них связаны с моим "BrewMethod"

Вот этот код
<pre>public class CoffeeMaker
{
	public string flavor;
	public string power;
	public string s;
	public string lid;
	public string water;
	public void PowerMethod()
	{ 

		string power = "on";
		Console.WriteLine("Coffee Maker is now on.");
		BrewMethod(power);
		CupMethod(power);
		WaterMethod(power);
		SizeMethod(power);
	}
	public void CupMethod(string power)
	{
		if (power == "on")
		{
			Console.WriteLine("Enter flavor of the pod.");
			string flavor = Console.ReadLine();

			BrewMethod(flavor);
		}
		else
		{
			Console.WriteLine("Please turn on coffee maker");
		}
	}
	
	public void WaterMethod(string power)
	{

		if (power == "on")
		{
			int waterAmount;

			Console.WriteLine("In ounces between 6 and 42, enter the amount of water that will be put in.");
			waterAmount = int.Parse(Console.ReadLine());

			if (waterAmount > 42 || waterAmount < 6)
			{
				Console.WriteLine("Enter a valid amount.");
			}

			else
			{
				string water = "enough";
				BrewMethod(water);
			}
		}
		else
		{
			Console.WriteLine("Please turn on coffee maker");
		}
	}


	public void SizeMethod(string power)
	{ 
		if (power == "on")
		{
			int size;

			Console.WriteLine("What size coffee?");
			Console.WriteLine("- Enter 1 for small");
			Console.WriteLine("- Enter 2 for medium");
			Console.WriteLine("- Enter 3 for large");

			size = int.Parse(Console.ReadLine());


			if (size < 1 || size > 3)
			{
				Console.WriteLine("Enter a valid size.");

			}

			if (size == 1)
			{
				string s = "small";
				BrewMethod(s);
			}

			if (size == 2)
			{
				string s = "medium";
				BrewMethod(s);
			}

			if (size == 3)
			{
				string s = "large";
				BrewMethod(s);
			}
		}
		else
		{
			Console.WriteLine("Please turn on coffee maker.");
		}
	}
		public void LidMethod()
		{
				Console.WriteLine("Lid has been closed.");
				string lid = "closed";
				BrewMethod(lid);
	}

	public void BrewMethod(string power, string flavor, string lid, string s, string water)
	{
		if (power != "on")

		Console.WriteLine("Lid has been closed.");
		
	}

}




Что я уже пробовал:

используя базу, но она просто выдает ошибку "неожиданный символ" и ничего не делает с другими ошибками.

2 Ответов

Рейтинг:
1

Tony Hill

Причина ошибки заключается в том, что сигнатура метода BrewMethod утверждает, что он ожидает пять строковых аргументов, называемых power, flavour, lid, s и water.

public void BrewMethod(string power, string flavor, string lid, string s, string water)


Однако, когда вы вызываете метод BrewMethod из других методов, вы вызываете его только с одним аргументом.

public void PowerMethod()
{
    string power = "on";
    Console.WriteLine("Coffee Maker is now on.");
    BrewMethod(power);    <------ Called with one argument whereas fivearguments are expected
    CupMethod(power);
    WaterMethod(power);
    SizeMethod(power);
}


Поэтому вы должны предоставить недостающие аргументы BrewMethod, где бы вы его ни вызывали.


Member 14637431

Спасибо, исправил мою проблему! Я попытался использовать тот же принцип, чтобы исправить ту же ошибку в отношении "power", когда я назвал его после имени переменной (так что public void CupMethod(string Power)), но это на самом деле не работает. Есть идеи, как это исправить?

Tony Hill

Да, но ваш CupMethod вызывает BrewMethod с одним аргументом, как это делает cupmethod, WaterMethod, SizeMethod, LidMethod.

Вы должны исправить это во всех этих методах, а также.

Member 14637431

не могли бы вы уточнить? Я немного запутался в том, что вы имеете в виду

Рейтинг:
0

Richard MacCutchan

Ваш BrewMethod определение включает в себя четыре параметра, которые не используются. Переопределите его как:

public void BrewMethod(string power)
{
    if (power != "on")
        Console.WriteLine("Lid has been closed.");    
}


[редактировать]
Однако, присмотревшись повнимательнее, вы обнаружите, что есть и другие методы, вызывающие BrewMethod с различными типами значений. Это не сработает, так как BrewMethod может обрабатывать только один параметр. Вам нужно изменить его для обработки различных типов (попробуйте набор перечислений), поэтому ему понадобится тип перечисления и его значение. Что-то вроде:
enum brewtypes{ power, water, ... etc.};

public void BrewMethod(brewtypes type, string value)
{
    if (type == brewtypes.power && value != "on")
        Console.WriteLine("Lid has been closed.");    
}


[/редактировать]