2016-05-06 14 views
2

私はこのコードをVisual Studio studio 2013に書いています。250.i以上の除数を持つ数を見つける簡単な質問は非常によくある質問で、私は問題を抱えています。私はスタックオーバーフローで提案されたコードを使用していますが、出力を表示していません。プログラムの実行と同様に、ラベルには何も表示されません。トライアングル番号には出力が表示されませんC#

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public int Find() 
     { 
      int number = 0; 
      for (int i = 1; ; i++) 
      { 
       number += i; // number is triangle number i 
       if (CountDivisorsOfNumber(number) > 500) 
        return number; 
        lblnum.Text = number.ToString(); 
      } 
     } 


     private static int CountDivisorsOfNumber(int number) 
     { 
      int count = 0; 
      int end = (int)Math.Sqrt(number); 
      for (int i = 1; i < end; i++) 
      { 
       if (number % i == 0) 
        count += 2; 
      } 
      if (end * end == number) // Perfect square 
       count++; 
      return count; 
     } 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      Find(); 
     } 
    } 
} 
+1

は、ラベルテキストが原因 'if'文のあなたの早期復帰の、のように見せているようだ最後から数 – Jonesopolis

答えて

1

ここでは二つの問題があります:

まず:あなたはあなたの「復帰」ステートメントの下に到達不可能なコードを持っているが、誰も私が間違っ.hereをやっていることは私のコードが何であるかを知っている私を助けてくださいすることができます。ラベルは更新されません。 if文とswitch文に中カッコを入れる必要があります。そのような:

if (CountDivisorsOfNumber(number) > 250) 
{ 
    lblnum.Text = number.ToString(); 
    return number; 
} 

第二:ここにあります:あなたは500

EDITをチェックされている

if (CountDivisorsOfNumber(number) > 500) 

:あなたのタイトルによると、250以上の部門で数字を表示したいのですが、コードを使ってテストしました。私は2162160を得た:

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      Find(); 
     } 

     private int CountDivisorsOfNumber(int number) 
     { 
      int count = 0; 
      int end = (int)Math.Sqrt(number); 
      for (int i = 1; i < end; i++) 
      { 
       if (number % i == 0) 
        count += 2; 
      } 
      if (end * end == number) // Perfect square 
       count++; 
      return count; 
     } 

     private int Find() 
     { 
      int number = 0; 
      for (int i = 1; ; i++) 
      { 
       number += i; // number is triangle number i 
       if (CountDivisorsOfNumber(number) > 250) 
       { 
        lblnum.Text = number.ToString(); 
        return number; 
       } 
      } 
     } 
    } 
+0

私は、必要な変更が、それの両方を行っていますまだ仕事がありません –

+0

私は両方の必要な変更を行ったが、それでも仕事はしません。 –

+0

@MohammedSayer私はちょうど変更を試み、彼らは働いています。コードを貼り付けてもらいたいですか?私はクイックコンソールアプリケーションをやった – Gaspa79

0

テキストがラベルに設定されている前に、あなたのreturn文が実行されます。同じスコープ内のreturn文の後のコードは無視されます。

変更し、これらの行:

public int Find() 
    { 
     int number = 0; 
     for (int i = 1; ; i++) 
     { 
      number += i; // number is triangle number i 
      if (CountDivisorsOfNumber(number) > 500){ 
      { 
       lblnum.Text = number.ToString(); 
       return number; 
      } 
     } 
    } 
+0

@Damiehはいあなたが喜ぶことができ、その窓の形のapplcation –

関連する問題