Member 14976913 Ответов: 3

Как я могу использовать switch-case таким образом?


using System;
using System.Text.RegularExpressions;

namespace ConsoleApp18
{
    class Program
    {
        static void Main(string[] args)
        {
            int value1;

            Console.WriteLine("Please enter humidity(0-100)");

            value1 = Convert.ToInt32(Console.ReadLine());
            switch (value1)
            {
                case value1 <= 20 && value1 > 0:
                    Console.WriteLine("too dry!");
                    break;
            }
        }
    }
}


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

Я ДОЛЖЕН ИСПОЛЬЗОВАТЬ РАСПРЕДЕЛИТЕЛЬНЫЙ ЯЩИК;
ВОПРОС: ПРОГРАММА ДЛЯ ПРЕОБРАЗОВАНИЯ ЗНАЧЕНИЙ ВЛАЖНОСТИ В УДОБОЧИТАЕМЫЙ ФОРМАТ.

ПРОГРАММА ЗАПИШЕТ ДЛЯ ВЫВОДА СЛЕДУЮЩИЕ РЕЗУЛЬТАТЫ В ЗАВИСИМОСТИ ОТ ВХОДНЫХ ДИАПАЗОНОВ ОТ 0 ДО 100
%20 и ниже-> слишком сухо
%21-%40-> сухой
%41-&60-> немного сухой
%61-%80-> немного влажно
%81 и выше -> влажный

ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ НАПИСАТЬ ЭТОТ КОД, Я НЕ МОГУ ЭТОГО СДЕЛАТЬ.

j snooze

Простой поиск Google будет делать трюк. Просто найдите "оператор переключения c# больше, чем".
Во-первых, Google, а во-вторых, задавайте вопросы здесь. Если мы сможем найти его в течение нескольких секунд в интернете, вы тоже сможете. Это замечательный инструмент для выяснения того, как делать вещи.

PIEBALDconsult

Это не похоже на подходящую ситуацию для переключателя/корпуса

Member 14976913

Такой человек с высшим уровнем мозга... (j snooze)я сделал все поиски, и я не мог достичь результата успешно, так как я сказал, что мне нужна помощь.

BillWoodruff

И в C# 7, и в C # 8 есть новые способы сделать это, но зачем мне тратить свое время, помогая такому ленивому нытику, как ВЫ, который оскорбляет людей, пытающихся помочь ? Расти !

3 Ответов

Рейтинг:
1

OriginalGriff

То switch оператор не допускает нескольких условий, он допускает только тот случай, когда switch значение переменной точно соответствует тому, что указано в case блок.

Вам нужно использовать if ... else if ... else вместо:

if (a <= 100 && a >= 80)
   {
   ...
   }
else if (a >= 50)
   {
   ...
   }
else
   {
   ...
   }


Если ваш наставник сказал вам использовать switch и ничего больше, затем вычтите единицу из процента (чтобы привести все значения в диапазон от 20 до 39 вместо 21 до 40), а затем switch на эту величину делится десять.
Это уменьшит его до 9 case заявления и дефолт, если вы подумаете об этом в течение минуты или двух.

Попробуйте - это совсем не сложно!


Рейтинг:
1

Patrice T

Скорее, чем switch подумайте об этом if.
C# If ... Еще[^]
[Обновление]

Цитата:
Как я уже сказал, я должен использовать переключатель. Это всего лишь домашнее задание, но мне интересно, как я могу решить этот вопрос...

случай может обрабатывать только 1 значение, поэтому 1 случай на значение.
switch (value1)
{
    case 1:
    case 2:
    case 3:
        Console.WriteLine("too dry!");
        break;
    ...
}


PIEBALDconsult

Ммм... это классное задание?

Patrice T

возможно :)

Member 14976913

Как я уже сказал, я должен использовать переключатель. Это всего лишь домашнее задание, но мне интересно, как я могу решить этот вопрос...

BillWoodruff

Привет, Патрис, оба C#7/8 предлагают способы включения диапазонов.

Patrice T

Я не видел этого синтаксиса.

BillWoodruff

Значит ты не смотрел :)

Patrice T

Я там только слонялся Переключатель C# [^]

BillWoodruff

не расширяй критерии своего поиска, и ты не найдешь ? :)

Richard MacCutchan

Я только что нашел ссылку на MSDN. Мне нужно немного полежать в темной комнате.

BillWoodruff

-О дивный новый мир! https://stackoverflow.com/a/61503679/133321

Список<инт&ГТ; oneToThree = новый список<внутреннее и GT;() { 1, 2, 3 };

int GetValue(int val) =переключатель> val
{
_ когда онетотри.Содержит(val) => DoSomeStuff(),
_ если val == 4 || вал == 5 || значение == 6 =&ГТ; DoSomeDifferentSwitch(),
_ => DefaultSwitch()
};

Richard MacCutchan

Родника!

Рейтинг:
0

PIEBALDconsult

Простоты.

public enum Humidity
{
  [System.ComponentModel.DescriptionAttribute("OUT OF RANGE")]
  Invalid  = 0
,
  [System.ComponentModel.DescriptionAttribute("TOO DRY")]
  VeryLow  = 1
,
  [System.ComponentModel.DescriptionAttribute("DRY")]
  Low      = 2
,
  [System.ComponentModel.DescriptionAttribute("LITTLE DRY")]
  Medium   = 3
,
  [System.ComponentModel.DescriptionAttribute("LITTLE MOIST")]
  High     = 4
,
  [System.ComponentModel.DescriptionAttribute("MOİST")]
  VeryHigh = 5
}

private static Humidity
GetHumidityLevel
(
  int Percent
)
{
  Humidity result = Humidity.Invalid ;

  if ( ( Percent >= 0 ) && ( Percent <= 100 ) )
  {
    result = (Humidity) ( ( Percent - 1 ) / 20 + 1 ) ;
  }

  return ( result ) ;
}

private static System.Collections.Generic.Dictionary<Humidity,string> hum =
  new System.Collections.Generic.Dictionary<Humidity,string>() ;

private static string
GetHumidityDescription
(
  Humidity Level
)
{
  string result ;

  if ( !hum.TryGetValue ( Level , out result ) )
  {
    System.Reflection.FieldInfo f = typeof(Humidity).GetField
    (
      Level.ToString ( "G" )
    ,
      System.Reflection.BindingFlags.Public
      |
      System.Reflection.BindingFlags.Static
    ) ;

    System.ComponentModel.DescriptionAttribute[] a = (System.ComponentModel.DescriptionAttribute[])
      f.GetCustomAttributes ( typeof(System.ComponentModel.DescriptionAttribute) , false ) ;

    hum [ Level ] = result = a [ 0 ].Description ;
  }

  return ( result ) ;
}


Тестирование:

for ( int h = -5 ; h < 110 ; h += 5 )
{
  Humidity v = GetHumidityLevel ( h ) ;

  switch ( v )
  {
    default :
    {
      System.Console.WriteLine ( "{0} {1} {2}" , h , v , GetHumidityDescription ( v ) ) ;

      break ;
    }
  }
}


Представьте это как свою собственную работу на свой страх и риск, конечно.


BillWoodruff

+5 к творческому хаосу :)

PIEBALDconsult

:D рад быть полезным.