#c#
#c#
Вопрос:
Я пытаюсь создать программу на C # с двумя классами, которые будут принимать решение на основе вводимых пользователем данных для вывода ответа (например, пользователь говорит rock, а компьютер говорит paper), из-за чего пользователь всегда проигрывает. В настоящее время у меня есть ошибки, говорящие
«Не удается неявно преобразовать тип ‘int’ в тип ‘strin&'» в строках со всеми регистрами («case1:», «case2:», «case3:»).
Тем не менее, я определил «nameClassif» как строку чуть выше. У меня также есть предупреждение: Предупреждение CS0649: Поле ‘Player.classif’ никогда не присваивается и всегда будет иметь значение по умолчанию null
usin& System;
usin& static System.Console;
namespace Tes
{
class PlayerApp
{
public static void Main()
{
Player player1 = new Player();
player1.PlayerChoice = InputValue();
player1.Classif = InputValue();
Clear();
Write(player1);
Write("nnnn");
ReadKey();
}
public static strin& InputValue()
{
Write("Please enter rock, paper, or scissors:t");
return ReadLine();
}
}
class Player
{
private strin& classif;
// constructors
public Player()
{ }
public Player(strin& pC)
{
PlayerChoice = pC;
}
// properties
public strin& PlayerChoice { &et; set; }
public strin& Classif { &et; set; }
public double SetFine()
{
if (classif == "rock")
{
WriteLine("The computer chose paper. You lose.");
}
else if (classif == "paper")
{
WriteLine("The computer chose scissors. You lose.");
}
else if (classif == "scissors")
{
WriteLine("The computer chose rock. You lose.");
}
return SetFine();
}
public strin& ReturnNameOfClassification()
{
strin& nameClassif;
switch (classif)
{
case 1: nameClassif = "rock"; break;
case 2: nameClassif = "paper"; break;
case 3: nameClassif = "scissors"; break;
default:
WriteLine("Invalid selection..."
" I assume you chose rock... :");
nameClassif = "rock - ???"; break;
}
return nameClassif;
}
public override strin& ToStrin&()
{
return "nnnttRock-Paper-Scissors"
"nThe computer choset" PlayerChoice;
}
}
}
Комментарии:
1. Ответ на основе названия вашего вопроса:
strin& a = 5;
2. @John (OP john) Сработал ли для вас какой-либо из ответов? Если это так, пожалуйста, отметьте один из них как принятый ответ, используя галочку под стрелкой вниз.
Ответ №1:
Проблема в том, что вы объявляете classif
как strin&
, но сравниваете его с int
:
private strin& classif;
switch (classif)
{
case 1: nameClassif = "rock"; break; // 1 is an int, not a strin&!
}
Короче говоря: «5» не равно 5 и не сравнимо с 5. Чтобы исправить это, вы должны сравнить like с подобным вместо:
switch (classif)
{
case "1": nameClassif = "rock"; break;
case "2": nameClassif = "paper"; break;
case "3": nameClassif = "scissors"; break;
default:
WriteLine("Invalid selection..."
" I assume you chose rock... :");
nameClassif = "rock - ???"; break;
}
Теперь сравниваемый тип совпадает с типом, с которым вы его сравниваете, поэтому код работает.
Ответ №2:
При использовании switch
инструкции значения в инструкции case должны соответствовать типу переменной, которую вы включаете. Вы включаете classif
, что является strin&
, но ваши case
операторы 1, 2, 3, которые являются int
Ответ №3:
Этот:
случай 1, 2, 3 означает целое число.. вот почему он возвращает ошибку.
case "1": nameClassif = "rock"; break;
case "2": nameClassif = "paper"; break;
case "3": nameClassif = "scissors"; break;