2010-12-15 20 views
0

本物の初心者の質問ですが、なぜこれは機能しませんか?コンパイラはcomparisonは、実行可能ファイルのパスにいた知らないので、私はエラーこのC#コードでエラーが発生するのはなぜですか?

 string comparison; 
     Console.WriteLine("Enter the first number"); 
     int firstNum = Convert.ToInt32(Console.ReadLine()); 
     Console.WriteLine("Enter the second number"); 
     int secondNum = Convert.ToInt32(Console.ReadLine()); 
     if (firstNum == secondNum) 
      comparison = "equals to"; 
     if (firstNum < secondNum) 
      comparison = "less than"; 
     if (firstNum > secondNum) 
      comparison = "greater than"; 
     Console.WriteLine("{0}",comparison); 
+0

Wroxによる2001年の開始C#をお持ちの方には、この代替ソリューションが66ページにあります。 – super9

答えて

5

...

if (firstNum == secondNum) 
     comparison = "equals to"; 
    else if (firstNum < secondNum) 
     comparison = "less than"; 
    else 
     comparison = "greater than"; 

、それはあなたがそれを宣言するときには、同様にString.Emptyをとの比較を設定することができます

+0

コンパイラは問題を先取りしてエラーを事前に蹴っていますか?数学ロジックは、比較に常に値 – super9

+0

が割り当てられることを保証するため、ある意味で - はい。もしあなたが本当に興味があれば、ダニエルが提供しているリンクは、私ができるよりも、より良く、より深く説明するでしょう: - – Lee

+0

あなたのソリューションはなぜ迅速かつ汚れた方法ですか? 「正しい」方法のように見える? – super9

12

として割り当てられていない変数 「比較」

使用を取得しています。それはほとんど自己だ

0

に動作します:IF-THEN-よそに3 ifsを変更説明 - 比較が割り当てられている(値を持っている)ことは保証できません。その結果、コンパイラはエラーをスローします。

基本的に、if文は値を 'comparison'に設定することはできません。これが失敗する理由です。このラウンド

迅速かつ汚い方法は、この

string comparison = "unassigned";

または

string comparison = String.Empty;

1

ここで他の回答が正しいと同様の方法で比較を宣言するだろう。問題はC#requiresすべての変数が使用される前にdefinitely assignedであることです。

0

ここでの基本的な問題は、コンパイラは、このような一連の条件をチェックして、すべての可能なオプションをカバーしていることを確認しないことです。条件付きのものは実行される可能性があるとみなされ、そのことは大きな画像を見ることはありません。

Jesse氏によると、他の場合は1つにして、コンパイラは他のパスがないことを確認できます。とにかくコードが常に3つのテストを実行するのに対し、コードは2つのテストで実行されるので、やや効率的です。