t778987 Ответов: 2

Мой код не будет компилироваться, где я ошибся?


Write a program that takes a decimal value between 1 and 10 and dis- plays its equivalent Roman numeral value. Display an error message if the value entered is outside of the acceptable range. Write a two class solution. The second class should allow the user to input a test value.


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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pg322number1
{
    class Program
    {
        static void Main(string[] args)
        {
            int value;
            string roman;

            DisplayInstrution();
            value = GetDecimal();

            roman = CalculateRoman(value);

            DisplayResults(value, roman);
            Console.ReadKey();
        }


        public static void DisplayInstrution()
        {
            Console.WriteLine("This application allows decimal value between 1 and 10");
            Console.WriteLine("to be entered. It displays the equivalent roman numeral value.");
            Console.ReadKey();
        }

        public static int GetDecimal()
        {
            int value;
            Console.WriteLine("Decimal value: ");
            value = Int32.Parse(Console.ReadLine());

            return value;
        }

        public static string CalculateRoman(int value)
        {
            string result;

            if (value < 0 || value > 10)
                result = "Invalid input";
            else
                if (value == 1)
                result = "I";
            else
                if (value == 2)
                result = "II";
            else
                if (value == 3)
                result = "III";
            else
                if (value == 4)
                result = "IV";
            else
                if (value == 5)
                result = "V";
            else
                if (value == 6)
                result = "VI";
            else
                if (value == 7)
                result = "VII";
            else
                if (value == 8)
                result = "VIII";
            else
                if (value == 9)
                result = "IX";
            else
                result = "IX";

            return result;

        }

        public static void DisplayResults(int value, string roman)
        {
            if (value != 0)
            {
                Console.WriteLine("Roman value: " + roman);
            }
        }
    }
}

PIEBALDconsult

Ммм, ну а какую ошибку компилятора вы получаете?

Dave Kreskowiak

Без понятия. Этот код компилируется чисто, так что я понятия не имею, о чем вы говорите, что касается ошибок компилятора.

Patrice T

Что такое сообщение об ошибке от компилятора ?

Richard MacCutchan

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

2 Ответов

Рейтинг:
2

OriginalGriff

Компиляция и запуск - это разные процессы-ваш код, как показано на рисунке, компилируется без проблем, как уже говорили другие. Но...

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Рейтинг:
2

Luc Pattyn

Извините, но я ничем не могу вам помочь. Ваша программа компилируется и работает хорошо.

Он немного выключен, когда вы входите в 10...

:)


t778987

как мне исправить то место, где он немного выключен? Также должен ли я добавлять классы?

Luc Pattyn

Вы запустили свой код? с разными входами?
вы внимательно прочитали задание? вы выполнили все требования?