在嵌套循环后填充数组

时间:2010-06-21 04:34:06

标签: java arrays

在addRolls方法下,我需要使用'total'变量数的频率填充nums数组。这些方法正确地将两个骰子卷加在一起并将其存储在'total'变量中,但我似乎无法将它们正确地抛入一个频率的数组中,例如上面的方法 - indFreq。如果难以理解,我认为这可能更有意义:我只相信需要关注的addRolls方法。它需要返回一个频率为'total'数字的数组。

import java.util.Scanner; 
public class Project2 {


public static void main( String[] args )
{
    Scanner inp = new Scanner( System.in );
    int matrix [][]=new int[100][2];

    System.out.print("Press 'q' to exit or 'enter' to continue: \t");
    String response =inp.nextLine();

    while ( !response.toLowerCase().equals("q") ){             
        for (int row=0;row<matrix.length;row++){
            for (int column=0;column<matrix[row].length;column++)
                matrix[row][column]=diceRoll();
        }

        int [] hist1=indFreq(matrix);
        int [] roll=addRolls(matrix);

        for (int i=1;i<hist1.length;i++){
            String star=starPrint(hist1[i]);
            System.out.print(" \n" +hist1[i]+ star);
        }
        System.out.println("");
        //  } 

        System.out.print("\n\nPress 'q' to exit or 'enter' to run again:\t");
        response =inp.nextLine();
    }       
}

public static int diceRoll(){
    int num=(int)(Math.random()*6+1);
    return num;
}

public static String starPrint(int value){
    String star= "";
    for (int i=0;i<value;i++){
        star +="*";
    }
    return star;
}

public static int [] indFreq(int [][] matrix){
    int [] nums =new int[7];

    for (int i=0;i<matrix.length;i++){          
        for (int j=0; j<matrix[i].length;j++)     
            nums[matrix[i][j]] += 1;                 
    }
    return nums;
}

public static int [] addRolls(int [][] matrix){
    int total= 0;
    int[]nums=new int[13];

    //Adds the rows together.
    for (int i=0;i<matrix.length;i++){
        total=0;
        for (int j=0;j<matrix[i].length;j++)   
            total+=matrix[i][j];  
    }
    return nums;    
}

}

2 个答案:

答案 0 :(得分:2)

    //Adds the rows together. 
    for (int i=0;i<matrix.length;i++){ 
        total=0; 
        for (int j=0;j<matrix[i].length;j++)    
            total+=matrix[i][j]; 
        nums[total]++;
    } 
你试过这个吗?

        for (int i=1;i<roll.length;i++){ 
            String star=starPrint(roll[i]); 
            System.out.print("\n" + i+ " : " +roll[i] + " " + star); 
        } 

答案 1 :(得分:1)

看起来你在int[] nums中对addRolls做了什么。也许你想在某个地方nums[index]++;


使用foreach循环

在大多数循环中,实际上并不需要显式索引。在这些情况下,使用“for-each”循环代替它会更具可读性。这是一个例子:

    int[] nums = { 1, 3, 5 };
    int sum = 0;
    for (int num : nums) {
        sum += num;
    }
    System.out.println(sum); // prints "9"

对于二维数组(或更确切地说,数组数组):

    int[][] mat = {
        { 1, 2, 3 },
        { 4, 5 },
        { 3, 3, 3 }
    };
    for (int[] row : mat) {
        int prod = 1;
        for (int num : row) {
            prod *= num;
        }
        System.out.println(prod);
    } // prints "6", "20", "27"

参考


次要分

而不是写

variable += 1;

你可以写:

variable++;

另外,请注意缩进。你的缩进是非常不一致的。

此外,您还可以实例化java.util.Random一次并在应用程序中调用其int nextInt(int n)方法,而不是使用Math.random()然后执行时髦的公式。

另见