#c# #.net
#c# #.net
Вопрос:
Это интерфейс для вычисления. Интерфейс имеет два метода calculateArea
и totalCost
.
public interface ICalculation {
int calculateArea();int totalCost()
}
Здесь я наследую класс интерфейса. Переменными являются litre, length, height .
public class Calculation : ICalculation {
public int litre;
public int length;
public int height;
public Calculation() {
litre= 0;length = 0;height = 0;
}
public Calculation(int litre2, int lenght2, int height2) {
this.litre = litre2;
this.length = lenght2;
this.height = height2;
}
public int calculateArea() {
return length * height;
}
public int totalCost() {
return calculateArea()* litre;
}
Тестирование программы для просмотра выходных данных.
Создайте новое вычисление объекта, а затем попросите пользователя ввести литр, длину и высоту. Вычислите площадь и общую стоимость после получения значений.
class Tester {
static void Main(string[] args) {
Calculation c = new Calculation();
try{
Console.WriteLine("How much litre?");
c.litre = int.Parse(Console.ReadLine());
Console.WriteLine("What is the lenght");
c.length = int.Parse(Console.ReadLine());
Console.WriteLine("What is the height");
c.height = int.Parse(Console.ReadLine());
Console.WriteLine("The Total area " c.calculateArea());
Console.WriteLine("The Total cost for the project is " c.totalCost());
Console.ReadKey();
}
catch(FormatException ){
Console.WriteLine("{0}is not an integer, try again!");
// Console.ReadLine();
}
}
}
Я хочу, чтобы пользователь мог вводить ТОЛЬКО значения int с консоли, а именно; литр, длина и высота. Предупреждает пользователя о том, что были вставлены другие типы данных (например, строка), и предлагает им повторить попытку. Проблема в том, что код вылетает, как только в любое из заданных значений вставляется значение, отличное от int. Есть мысли о том, как это сделать?
Ответ №1:
Я бы сказал, проверка с использованием цикла while.
int i;
while (true)
{
var line = Console.ReadLine();
if (int.TryParse(line, out i))
break;
Console.WriteLine("Invalid number");
}
Комментарии:
1. Подробное объяснение высоко ценится?
2. Использование
int.TryParse
заключается в том, чтобы избежать исключений, возникающих во время недопустимого приведения. Он вернетсяtrue
, если синтаксический анализ будет успешным, аfalse
если нет.break
Оператор выведет вас из цикла. В ответе use on @Mark Fro указано, что, хотя пользовательский ввод не является допустимым целым числом, он будет продолжать отображаться"Invalid number"
, но если он действителен, он выйдет из цикла, чтобы продолжить программные процессы. Существуют разные способы реализации этого, но основным помощником являетсяint.TryParse
.3. хорошо, где и как я могу изменить код для проверки этого? я использую объект c для чтения значений, полученных с консоли..
Ответ №2:
Модифицированная версия Mark answer .
public static int ReadFromConsole()
{
int i;
while (true)
{
var line = Console.ReadLine();
if (int.TryParse(line, out i)) break;
Console.WriteLine("Invalid number.");
}
return i;
}
тогда вы можете просто вызвать это так.
Console.WriteLine("How much litre?");
c.litre = ReadFromConsole();
Console.WriteLine("What is the lenght");
c.length = ReadFromConsole();
Console.WriteLine("What is the height");
c.height = ReadFromConsole();