3

ユーザーに番号を入力するように求める簡単なプログラムを作成しようとしています。次に、その番号を使用して、特定の年齢のチケットの費用を決定します。文字列を int に変換しようとすると問題が発生します。それ以外の場合、プログラムのレイアウトは問題ありません。助言がありますか?ありがとう

using System;

class ticketPrice
{    
    public static void Main(String[] args)
    {
        Console.WriteLine("Please Enter Your Age");
        int input = Console.ReadLine();
        if (input < 5)
        {
            Console.WriteLine("You are "+input+" and the admisson is FREE!");
        }
        else if (input > 4 & input < 18)
        {
            Console.WriteLine("You are "+input+" and the admission is $5");
        }
        else if (input > 17 & input < 56)
        {
            Console.WriteLine("You are "+input+" and the admission is $10");
        }
        else if (input > 55)
        {
            Console.WriteLine("You are "+input+" and the admission is $8");
        }
    }
}
4

5 に答える 5

10

方法を試してくださいint.TryParse(...)。例外はスローしません。

http://msdn.microsoft.com/en-us/library/f02979c7.aspx

また、あなたの条件では使用し&&ない&でください。&&は論理 AND であり、&ビットごとの AND です。

于 2009-06-04T19:05:52.263 に答える
2
  • 文字列を整数 (およびその他の数値型) に簡単に解析するには、その数値型の.TryParse(inputstring, yourintegervariable)メソッドを使用します。このメソッドはブール値 (True/False) を出力し、操作が成功したか失敗したかを知らせます。結果が false の場合は、先に進む前にエラー メッセージを表示できます (プログラムがクラッシュする心配はありません)。

  • switch ステートメントに関する以前のテキストが削除されました

  • &&C# では、論理 ANDの演算子を使用する必要があります。&は同じではなく、期待どおりに機能しない場合があります。

于 2009-06-04T19:10:35.187 に答える
1
int number = int.Parse(Console.ReadLine());

無効な番号を入力すると、例外がスローされることに注意してください。

于 2009-06-04T19:05:27.757 に答える
1

Int32.TryParse()メソッドを使用することをお勧めします。さらに、コードをリファクタリングすることをお勧めします-コードをよりきれいにすることができます(これが単なるサンプルコードではないと仮定します)。1 つの解決策は、キーと値のペアのリストを使用して、年齢から入学までをマッピングすることです。

using System;
using System.Collections.Generic;
using System.Linq;

static class TicketPrice
{
    private static readonly IList<KeyValuePair<Int32, String>> AgeAdmissionMap =
        new List<KeyValuePair<Int32, String>>
            {
                new KeyValuePair<Int32, String>(0, "FREE!"),
                new KeyValuePair<Int32, String>(5, "$5."),
                new KeyValuePair<Int32, String>(18, "$10."),
                new KeyValuePair<Int32, String>(56, "$8.")
            };

    public static void Main(String[] args)
    {
        Console.WriteLine("Please Enter Your Age!");

        UInt32 age;  
        while (!UInt32.TryParse(Console.ReadLine(), out age)) { }

        String admission = TicketPrice.AgeAdmissionMap
            .OrderByDescending(pair => pair.Key)
            .First(pair => pair.Key <= age)
            .Value;

        Console.WriteLine(String.Format(
            "You are {0} and the admission is {1}",
            age,
            admission));
    }
}

符号なし整数を使用して、負の年齢が入力されるのを防ぎ、入力をループに入れました。このようにして、ユーザーは無効な入力を修正できます。

于 2009-06-04T19:37:23.463 に答える
0

最初に行う必要があるのは、input変数を文字列に変更することです。

string input = Console.ReadLine();

それを取得したら、それを整数に変換する方法がいくつかあります。詳細については、この回答を参照してください:
オブジェクトを int にキャストするより良い方法

于 2009-06-04T19:12:51.407 に答える