【问题标题】:Populating an Array after a nested loop在嵌套循环后填充数组
【发布时间】:2010-06-21 04:34:06
【问题描述】:

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

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

}

【问题讨论】:

  • 你可能想发布完整的作业文本,因为你的描述很难理解。
  • 我相信这只是需要查看的 addRolls 方法。它需要返回一个具有“总数”频率的数组。
  • 跑题了,但是你为什么把nums数组的长度设置为13呢?
  • 由于某种原因,它是数字数组 +1。嗯,我不确定具体细节,但我很确定它必须是那样的。可能是因为它在模拟掷骰子,或者是因为 math.random 的工作原理?有更多知识的人想拿这个吗?

标签: java arrays


【解决方案1】:
    //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); 
        } 

【讨论】:

  • 是的!就是这样。谢谢一堆。上帝……我不知道我离得这么近。 :(((((我是智障。再次感谢st0le。
【解决方案2】:

您似乎没有对addRolls 中的int[] nums 做任何事情。也许你想要一个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()

另见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多