2012-08-08 75 views
0

我有一个uni任务,我必须创建一个Java程序,该程序会产生随机配对的客户及其事务总数。在java中只打印一次随机数组变量

它分为两个部分,其中第一部分产生的客户和他们的交易就像这样:

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 

第二汇总交易总数为每一个客户,像这样:

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 

我的问题是第二部分应该只产生一次客户ID,即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 

    } 
} 

回答

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;} 

这样你仍然得到顾客的随机顺序没有repreating他们

+0

然后在您的解决方案中再添加一个循环,以查找此customer_id是否存在于customerID [customer_count]之前的某个位置上,如果是,则继续下一个customer_count值 – jderda 2012-08-08 08:18:42

+0

的循环,但不幸的是客户ID无法排序。客户:1,交易:3 客户:3,交易:3 客户:0,交易:2 客户:2,交易:1 客户:4,交易:1 – Lukaaaaaaaay 2012-08-08 08:20:24

+0

谢谢你'重新帮助,但我不能使用布尔变量只有int和双 – Lukaaaaaaaay 2012-08-08 08:29:07

2

我建议你看看如何Collections.shuffle的作品。在你的情况下,你可以创建一个包含所有可能值的数组,然后以随机顺序“随机”。

+0

我不能使用任何东西,但整数和双打,所以没有额外的数组 – Lukaaaaaaaay 2012-08-08 07:53:20

+1

你甚至不能在你的代码中使用这两个数组,我很困惑。 – 2012-08-08 07:54:28

+0

数组给我,然后我必须使用int和double变量来处理存储在它们中的信息。除了给予我的数组外,我无法创建任何数组。那有意义吗? – Lukaaaaaaaay 2012-08-08 08:01:50

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慢。

+0

感谢您的评论。 2 客户:1交易次数:2 2: 客户:2交易次数:2 2: 客户:4交易次数:2 – Lukaaaaaaaay 2012-08-08 08:49:56

+0

不幸的是,它没有答案即时寻找。其可笑烦人 – Lukaaaaaaaay 2012-08-08 08:53:40

+0

顾客:1,交易:3 顾客:3,交易:3 顾客:0,交易:2 顾客:2,交易:1 顾客:4,交易:1 – Lukaaaaaaaay 2012-08-08 09:00:28