0

私にはuniの割り当てがあり、ランダムなペアの顧客とそのトランザクションの合計を生成するJavaプログラムを作成する必要があります。

それは2つの部分に分かれており、最初の部分は顧客とそのトランザクションを次のように生成します。

Customer ID, Transaction Value
1, 74.36 
1, 44.98 
3, 6.44
0, 19.13
3, 59.44
2, 81.56
0, 87.21
4, 40.9
1, 42.11
3, 66.05

2つ目は、次のように各顧客のトランザクションの総数を要約します。

Customer: 1 Transactions: 3.0
Customer: 1 Transactions: 3.0
Customer: 3 Transactions: 3.0
Customer: 0 Transactions: 2.0
Customer: 3 Transactions: 3.0
Customer: 2 Transactions: 1.0
Customer: 0 Transactions: 2.0
Customer: 4 Transactions: 1.0
Customer: 1 Transactions: 3.0
Customer: 3 Transactions: 3.0

私の問題は、2番目のセクションで各顧客IDを1回だけ生成する必要があること1,3,0,2,4です。これは、int変数とdouble変数を使用して、他の配列や構造体を作成せずにのみ実行できます。私のコードは以下にあります。

 import java.util.*;

 public class Assignment3 {
   public static long studentNumber=1234567; 

   public static int customerID[];
   public static double transactionValue[];

   public static void initialiseData(int size) {
     customerID = new int[size];
     transactionValue = new double[size];

     Random rand = new Random(studentNumber);
     for (int i=0; i<size; i++) {
       customerID[i] = rand.nextInt(size / 2);
       transactionValue[i] = rand.nextInt(10000) / 100.0;
     }
   }

   public static void main(String args[]) {
     int size=10;

    initialiseData(size);

    // Your code should only be below this line
    double transaction = 0;
    int customer = 0;
    int customer_Total = 0;
    int count = 0;
    int customer_count = 0;
    double transaction_Total = 0;

    System.out.println("Customer ID, Transaction Value");

    for (size= 0; size < customerID.length; size++) {
    customer= customerID[size];
    transaction= transactionValue[size];
    System.out.println(customer + ", " + transaction);

    }

    System.out.println("");

    for(customer_count = 0; customer_count < customerID.length; customer_count++) {
      transaction_Total= 0;
      customer_Total = customerID[customer_count];
      count = customerID[customer_count];
      //System.out.println(count);

      for (int customer_count2 = 0;
           customer_count2 < customerID.length;
           customer_count2++) {                         
        if (customer_Total == customerID[customer_count2]) {
          transaction_Total++;

          //System.out.println(customer_count2);
        }
      }

      System.out.println("Customer: "+ customer_Total + " " +
                         "Transactions: " + transaction_Total); 
    }

    // Your code should not be below this line

  }
}
4

3 に答える 3

2

Collections.shuffleがどのように機能するかを確認することをお勧めします。あなたの場合、すべての可能な値の配列を作成し、ランダムな順序で「シャッフル」することができます。

于 2012-08-08T07:52:08.517 に答える
1

編集:このコードでは:

for(customer_count = 0; customer_count < customerID.length; customer_count++) {
  transaction_Total= 0;
  customer_Total = customerID[customer_count];
  count = customerID[customer_count];
  //System.out.println(count);

  for (int customer_count2 = 0;
       customer_count2 < customerID.length;
       customer_count2++) {                         
    if (customer_Total == customerID[customer_count2]) {
      transaction_Total++;

      //System.out.println(customer_count2);
    }
  }

  System.out.println("Customer: "+ customer_Total + " " +
                     "Transactions: " + transaction_Total); 
}

'transaction_Total = 0;'の後に以下を追加します:

int wasBefore = 0; //are you allowed to use boolean variables?
for (int customer_count3 = 0;
       customer_count3 < customer_count;
       customer_count3++) {                         
    if (customer_Total == customerID[customer_count3]) {
      wasBefore = 1;
    }
}
if (wasBefore==1) {continue;}

このようにして、顧客を繰り返し表示することなく、顧客のランダムな順序を取得できます

于 2012-08-08T07:51:14.980 に答える
0

配列を使用しないなどの制限を設けることは珍しいため、宿題は少しイライラします。

ただし、次のことを行うことができます。顧客IDは0からsize / 2になるため、すべての可能な顧客のトランザクションをカウントするループを作成できます。このような

for(int customer_id = 0; customer_id <= size /2 ; customer_id++){
    int transaction_sum = 0;
    for (j= 0; j < customerID.length; j++)
        if(customerID[j] == i)
             transaction_sum++;
    if( transaction_sum > 0)
        System.out.println("Customer: " + customer_id +
                           "  Transactions: " + transaction_sum);
}

ただし、これは適切な解決策ではありません。これは、考えられるIDの数が多い場合は遅いためです。

于 2012-08-08T08:28:36.320 に答える