2017-09-21 9 views
-1

私のプログラムを実行した後、私の配列のすべての値が1に等しいことに気づき、デバッガを実行した後、私のforループが配列に移入されているはずですが、理由は分かりません。誰かが私が間違ったことを教えてもらえますか?メソッドforループを完全に無視する:

プログラムは、この行に到達した:そして

for (a = a; a >= 1000; a++) // Adds all prime numbers 1 through 1000 to primeA[]; 

とにジャンプ:

for (int k = 0; k < primeA.Length; k++) 

完全なコード:

class calcPrime 
{ 
    /* @Method: isPrimeSET 
    * @param: int a, int b 
    * @return: true/false 
    * @ Builds a list of primes and sorts them into a multi dimensional array. 
    */ 
    public int[,] isPrimeSet(int a, int b) 
    { 
     int[,] primeNumArray = new int[999, 999]; // Prime Multi Array 1000 slots in each array 
     int[] primeA = new int[999]; // All prime numbers a 1 to 1000 
     int[] primeB = new int[999]; // All prime numbers b 1 to 1000 

     ArrayList dumpArrayA = new ArrayList(); // None prime numbers 
     ArrayList dumpArrayB = new ArrayList(); // None prime numbers 

     for (a = a; a >= 1000; a++) // Adds all prime numbers 1 through 1000 to primA[]; 
     { 
      if (isPrime(a) == true) 
      { 
       int i = 0; // Index of primeA 
       primeA[i] = a; // Add primes to a 
       i++; 
      } 

      else // Stores none prime numbers 
      { 
       int m = 0; 
       dumpArrayA.Add(m); 
       m++; 
      } 

      for (b = b; b >= 1000; b++) // Adds all prime number 1 through 1000 to primeB[]; 
      { 
       if (isPrime(b) == true) 
       { 
        int j = 0; // Index of primeB 
        primeB[j] = b; // Add primes to b 
        j++; 
       } 

       else 
       { 
        int n = 0; 
        dumpArrayB.Add(n); 
        n++; 

       } 

      } 
     } 

     // Merge primesA[] and primesB[]; 
     for (int k = 0; k < primeA.Length; k++) 
     { 
      primeNumArray[k, 0] = primeA[k]; 
      primeNumArray[k, 1] = primeB[k]; 
     } 

     // Print Contents of PrimeNumArray 
     for (int l = 0; l >= primeNumArray.Length; l++) { 
      Console.WriteLine(primeNumArray[l, l]); 
     } 

     return primeNumArray; 

    } 

作るのが無駄な試みで追加else文とダンプアレイプログラムの仕事。また、私はforループ内の同じ変数に変数を代入したことを知っています。メソッドが呼び出されたときにユーザーが選択した場所に値を設定したかったのです。

+2

'for(a = a; = 1000; a ++)は' for(a = 1; a> = 1000; a ++) 'であることを意味していますか? –

+3

a> = 1000または<= 1000 –

+0

aは、メソッドがメインで呼び出されたときにメソッドに渡される値であることを意図しています。 – shockemc

答えて

1

多くの間違いがあります!私はここにあなたのコード

を修正するために管理

は、あなたの修正コードです:

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

namespace Prime_number 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[,] k = isPrimeSet(1, 1); 
      Console.Read(); 
     } 

     public static int[,] isPrimeSet(int a, int b) 
     { 
      int[,] primeNumArray; // Prime Multi Array 1000 slots in each array 
      ArrayList primeA = new ArrayList(); // All prime numbers a 1 to 1000 
      ArrayList primeB = new ArrayList(); // All prime numbers b 1 to 1000 

      ArrayList dumpArrayA = new ArrayList(); // None prime numbers 
      ArrayList dumpArrayB = new ArrayList(); // None prime numbers 
      int i = 0; 
      int m = 0; 
      int j = 0; // Index of primeB 
      int n = 0; 

      for (a = 1; a <= 1000; a++) // Adds all prime numbers 1 through 1000 to primA[]; 
      { 
       if (isPrime(a) == true) 
       { 
        // Index of primeA 
        primeA.Add(a); // Add primes to a 
        i++; 
       } 
       else // Stores none prime numbers 
       { 
        dumpArrayA.Add(m); 
        m++; 
       } 
      } 

      for (b = 1; b <= 1000; b++) // Adds all prime number 1 through 1000 to primeB[]; 
      { 
       if (isPrime(b) == true) 
       { 
        primeB.Add(b); // Add primes to b 
        j++; 
       } 
       else 
       { 
        dumpArrayB.Add(n); 
        n++; 
       } 

      } 
      primeNumArray= new int[primeA.Count,2]; 
      // Merge primesA[] and primesB[]; 
      for (int k = 0; k < primeA.Count; k++) 
      { 
       primeNumArray[k, 0] = (int)primeA[k]; 
       primeNumArray[k, 1] = (int)primeB[k]; 
      } 

      // Print Contents of PrimeNumArray 
      for (int l = 0; l <= primeNumArray.GetLength(0)-1; l++) 
      { 
       Console.WriteLine(primeNumArray[l, 0] + " " + primeNumArray[l, 1]); 
      } 

      return primeNumArray; 

     } 


     static bool isPrime(int num) 
     { 
      bool bPrime = true; 
      int factor = num/2; 
      int i = 0; 
      for (i = 2; i <= factor; i++) 
      { 
       if ((num % i) == 0) 

        bPrime = false; 
      } 
      return bPrime; 
     } 
    } 
} 

はそれをトライ:)を与えます!ありがとう

1

私は、配列のインデックスが正しくないと思われると思いますが、

 if (isPrime(a) == true) 
     { 
      int i = 0; // Index of primeA 
      primeA[i] = a; // Add primes to a 
      i++; 
     } 

はPRIMEA [0]の値を変更することはありませんか? primeB配列の場合

  int j = 0; // Index of primeB 
      primeB[j] = b; // Add primes to b 
      j++; 

多分、ループのうちiとjを定義する必要があります。

+0

OK、試してみます。ありがとう。 – shockemc

関連する問題