【问题标题】:My code is writing occurrences separately我的代码正在单独编写事件
【发布时间】:2014-10-05 18:00:40
【问题描述】:

所以我又遇到了另一个问题。阅读我的代码和输出后,您就会明白我的意思。我正在尝试打印我的 Array 的数字及其出现次数。 !!!不幸的是我不能使用任何导入代码......!!!

        int[] fr = new int[Bag.length];
        for( int i = 0; i < Bag.length; i++ ) 
        fr[i]++; 
        for( int i = 0; i < fr.length; i++ ) { 
        if( fr[i] > 0 ) 
        System.out.println( "The number " + Bag[i] + " occurs " + fr[i] + " time(s).");}}

如果我将 5、6 和 5 添加到我的数组中; (顺便说一句,我创建了 Add 操作,所以起初我的数组是 0,然后变得更大)

输出:数字 5 出现 1 次。 数字 6 出现 1 次。 数字 5 出现 1 次。

顺便说一句,我的添加操作是:

        int[] Bag = new int[0]; 
        String name = scanner.next();

        if (name.equals("A")){
        int number = scanner.nextInt();    
        NewBag[NewBag.length - 1] = number;
        for(int i = 0; i < Bag.length; i++){
        NewBag[i] = Bag[i];}
        Bag = NewBag;
        System.out.println(number + " added to Bag.");}

【问题讨论】:

  • 你能贴出你添加5、6和5的代码吗?也许它有助于解释哪里出了问题。
  • 这看起来像一个“直方图” - 也许它有助于谷歌搜索“直方图”。 SO中有一个很好的问题/答案(stackoverflow.com/questions/13106906/…
  • 是什么让您相信当我们阅读您的代码时我们会理解?作为一个疯狂的猜测,我认为你想增加 fr[Bag[i]] 而不是 fr[i]。但这会产生 ArrayIndexOutOfBoundsExceptions...
  • 是的,你的猜测是真的。

标签: java arrays


【解决方案1】:

最好使用地图。

Map<Integer,Integer> occurences= new HashMap<Intege,Integer>();
for( int bagValue: bag ){
 int counter = occurences.hasValue(bagValue)? occurences.get(bagValue): 0;
 occurences.put(bagValue, counter++)
}

将更灵活地完成这项任务,并且对记忆的要求更低。

【讨论】:

  • |请记住,您的包的值可能大于 bah 长度。将所有内容存储在数组中需要您知道最大值。
【解决方案2】:

虽然您还有其他问题,但这是您应该做的。

int[] fr = new int[10000];// modified
for( int i = 0; i < Bag.length; i++ ) 
    fr[Bag[i]]++;   // Here
for( int i = 0; i < fr.length; i++ ) { 
    if( fr[i] > 0 ) 
        System.out.println( "The number " + Bag[i] + " occurs " + fr[i] + " time(s).");}}

问题 Bag 数组中的最大和最小数是多少?说Bag=new int[10],它的范围是0-10000;然后fr=new int[10001];

好的,关于另一个问题,我看到你试图增加 Bag 的大小

    int[] Bag = new int[0]; 
    String name = scanner.next();
    int[] NewBag;
    if (name.equals("A")){
        int number = scanner.nextInt();    
        NewBag = new int[Bag.length+1];// resize the array
        NewBag[NewBag.length - 1] = number;
        for(int i = 0; i < Bag.length; i++){
            NewBag[i] = Bag[i];
        }
        Bag = NewBag;
        System.out.println(number + " added to Bag.");
    }

【讨论】:

  • 是的,它给了我一个 ArrayIndexOutOfBoundsException 错误。但我不知道如何在不使数组长度为 0 的情况下进行添加操作。
  • @HalilM,我修改了第一行,所以你将有一个固定大小的 fr 只是暂时让你开始编码。
  • 嗯我刚刚修改为10000。再次出现同样的错误。我认为只要我保持 Bag 数组的长度为 0,它就会给我这个错误,对吗?
  • 好的,我已经修改了你的一行代码来动态改变NewBag的大小
【解决方案3】:

如果我理解正确,您有一个 int 超集,并且您想知道每个 int 的出现次数。

为此,您必须迭代您的数组,并检查每个新 int,如果它已经插入到数组中,如果是,则分别递增。

int flag = 1
for (i=0; i<Bag.length;i++){
    for(j=0;j<fr.length;j++){
        if(Bag[i] == fr[j]){
            fr[j]++;
            flag = 0;
            break;
        }
    if(flag){
        fr[i}++;
    }
}

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多