返回的数字输出不来预期? [英] Output of returning the digit does not come as expected?

查看:113
本文介绍了返回的数字输出不来预期?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

鉴于号作为输入的阵列,返回的发生在输入的最大次数的位


我不知道新的数组的大小,我认为creating.I大小twice.To分开我分了数把它modulas并添加到新的array.After,我发现的最大数量的数字在新的array.But我没有得到的输出符合市场预期。

@Edit根据提到的答案我编辑c.Now出现的问题是,我的数组c的值不引用$ C $。(我的意思是我通过数字分开他们,但我得到相同的数字阵列当我返回q


  

任何人都可以指导我什么,我做错了什么?


 公众诠释frequentDigit(INT []号)
 {
   INT Q = 0;
   INT C [] = seperateDigits(数字​​);
   INT P = findMax(C);
   的for(int i = 0; I< c.length;我++)
   {
    如果(P == I)
    {
        // B1 = TRUE;
        Q =号[I]
       打破;
    }
   }   返回q; } INT [] seperateDigits(INT []号)
 {
  诠释计数= 0;  的for(int i = 0; I< numbers.length;我++)
  {
   诠释aNumber的=号[I]
   如果(aNumber的== 0)// @编辑
   算上++;
  其他
  {
     而(aNumber的大于0)
    {
      INT aDigit = aNumber的10%;
      的System.out.println(aDigit);
       算上++;
     aNumber的= aNumber的/ 10;
    }
  } }
 INT C [] =新的INT [计数] 的for(int i = 0; I< numbers.length;我++)
 {
  诠释aNumber的=号[I]
  如果(aNumber的== 0)// @编辑
     C [i] = aNumber的;
  其他
  {
     而(aNumber的大于0)
    {
      INT aDigit = aNumber的10%;
      //System.out.println(aDigit);
       //计数++;
      C [i] = aDigit; //@编辑
     //System.out.println(c[i]); //@编辑     aNumber的= aNumber的/ 10;
    }
  } }
 返回℃;
}    INT findMax(INT C [])
    {
        INT最大= C [0];
        INT max_i = 0;
        的for(int i = 1; I< c.length;我++)
        {
            如果(三[Ⅰ]≥最大值)
            {
                最大= C [I]
                max_i = I;
            }
        }
        返回max_i;
    }

输出

 参数|实际输出|预期输出
--------------------------- | ----------------- | ---- -------------
{24,27,30,31,34,37,40,42} | 40 | 3


解决方案

一对夫妇的事情,我看到...

1)您的 frequentDigit 方法应该返回 INT ,而不是 INT []

2)您需要使用长度为10的数组作为@Andreas在注释中提到。

3)您的 findMax 方法返回的最常见的数字出现的次数,而不是数字本身。要捕获数字,你需要同时跟踪max和与之对应的I值。你并不需要检查的长度c 循环会替你。

  INT findMax(INT C []){
    INT最大= C [0];
    INT max_i = 0;
    的for(int i = 1; I< c.length;我++){
        如果(三[Ⅰ]≥最大值){
            最大= C [I]
            max_i = I;
        }
    }
    返回max_i;
}

4) seperateDigits (除了你的循环:独立的,而不是单独)是做一些神秘的东西这是良好的动机,但不正确。

  INT C [] =新INT [10];
//System.out.println(c.length);
的for(int i = 0; I< numbers.length;我++){
    诠释aNumber的=号[I]
    如果(aNumber的== 0)
        C [0] ++;
    其他{
        而(aNumber的大于0){
            INT aDigit = aNumber的10%;
            的System.out.println(aDigit);            C [aDigit] ++;
            的System.out.println(C aDigit]);            aNumber的= aNumber的/ 10;
        }
    }
}

事情的方方面面

 包某某;公共类DigitCounter {    公共静态无效的主要(字串[] args){
        DigitCounter我=新DigitCounter();
        的System.out.println(me.frequentDigit(24,27,30,31,34,37,40,42));
        的System.out.println(me.frequentDigit(12345,54321,24,159,2468,98765,
                0,1020304050));
        的System.out.println(me.frequentDigit(123,-654,879));
        的System.out.println(me.frequentDigit(0));
    }    公众诠释frequentDigit(INT ......数字){
        INT C [] = separateDigits(数字​​);
        INT P = findMax(C);
        回磷;
    }    INT [] separateDigits(INT []号){
        INT C [] =新INT [10];
        的for(int i = 0; I< numbers.length;我++){
            诠释aNumber的=号[I]
            如果(aNumber的== 0)
                C [0] ++;
            其他{
                而(aNumber的大于0){
                    INT aDigit = aNumber的10%;
                    C [aDigit] ++;
                    aNumber的= aNumber的/ 10;
                }
            }
        }
        返回℃;
    }    INT findMax(INT C []){
        INT最大= C [0];
        INT max_i = 0;
        的for(int i = 1; I< c.length;我++){
            如果(三[Ⅰ]≥最大值){
                最大= C [I]
                max_i = I;
            }
        }
        返回max_i;
    }
}

Given an array of numbers as input, return the digit which occurs the maximum number of times in the input.

I don't know the size of the new array I am creating.I assumed the size is twice.To separate the digits I divided the number took it modulas and added to the new array.After that I found the maximum number in the new array.But I am not getting the output as Expected.

@Edit According to the Answers mentioned I edited the code.Now the problem occurs is that my array c values are not referenced.(I mean I separated them by their Digits but I am getting the same array of numbers when I am returning q

Can anyone guide me what I am doing wrong?

 public int frequentDigit(int[] numbers)
 {
   int q=0;
   int c[]=seperateDigits(numbers);
   int p=findMax(c);
   for(int i=0;i<c.length;i++)
   {
    if(p==i)
    {
        //b1=true;
        q=numbers[i];
       break;
    }
   } 

   return q;

 }      

 int[] seperateDigits(int[] numbers) 
 {     
  int count=0;

  for (int i = 0; i < numbers.length; i++) 
  {
   int aNumber = numbers[i];
   if(aNumber==0)           //@Edit
   count++;
  else
  {
     while (aNumber > 0) 
    {
      int aDigit = aNumber % 10;
      System.out.println(aDigit);
       count++;


     aNumber = aNumber / 10;
    }
  }

 }
 int c[] = new int[count];

 for (int i = 0; i < numbers.length; i++) 
 {
  int aNumber = numbers[i];
  if(aNumber==0)           //@Edit
     c[i]=aNumber;
  else
  {
     while (aNumber > 0) 
    {
      int aDigit = aNumber % 10;
      //System.out.println(aDigit);
       //count++;
      c[i]=aDigit;             //@Edit
     //System.out.println(c[i]);  //@Edit

     aNumber = aNumber / 10;
    }
  }

 }
 return c;
}

    int findMax(int c[]) 
    {
        int max = c[0];
        int max_i = 0;
        for (int i = 1; i < c.length; i++)
        {
            if (c[i] > max) 
            {
                max = c[i];
                max_i = i;
            }
        }
        return max_i;
    }

Output

       Parameters          |  Actual Output  |  Expected Output
---------------------------|-----------------|-----------------
{24,27,30,31,34,37,40,42}  |     40          |        3

解决方案

A couple of things that I see...

1) Your frequentDigit method should return int, not int[].

2) You need to use an array of length 10 as @Andreas mentions in comments.

3) Your findMax method is returning the number of times the most frequent digit occurs, not the digit itself. To capture the digit, you'll need to track both max and the i value that corresponds to it. You don't need to check the length of c, the for loop does that for you.

int findMax(int c[]) {
    int max = c[0];
    int max_i = 0;
    for (int i = 1; i < c.length; i++) {
        if (c[i] > max) {
            max = c[i];
            max_i = i;
        }
    }
    return max_i;
}

4) Your for loop in seperateDigits (aside: "separate", not "seperate") is doing some mysterious things which are well-motivated but incorrect.

int c[] = new int[10];
//System.out.println(c.length);
for (int i = 0; i < numbers.length; i++) {
    int aNumber = numbers[i];
    if (aNumber == 0)
        c[0]++;
    else {
        while (aNumber > 0) {
            int aDigit = aNumber % 10;
            System.out.println(aDigit);

            c[aDigit]++;
            System.out.println(c[aDigit]);

            aNumber = aNumber / 10;
        }
    }
}

The Whole Enchilada

package xyz;

public class DigitCounter {

    public static void main(String[] args) {
        DigitCounter me = new DigitCounter();
        System.out.println(me.frequentDigit(24, 27, 30, 31, 34, 37, 40, 42));
        System.out.println(me.frequentDigit(12345, 54321, 24, 159, 2468, 98765,
                0, 1020304050));
        System.out.println(me.frequentDigit(123, -654, 879));
        System.out.println(me.frequentDigit(0));
    }

    public int frequentDigit(int... numbers) {
        int c[] = separateDigits(numbers);
        int p = findMax(c);
        return p;
    }

    int[] separateDigits(int[] numbers) {
        int c[] = new int[10];
        for (int i = 0; i < numbers.length; i++) {
            int aNumber = numbers[i];
            if (aNumber == 0)
                c[0]++;
            else {
                while (aNumber > 0) {
                    int aDigit = aNumber % 10;
                    c[aDigit]++;
                    aNumber = aNumber / 10;
                }
            }
        }
        return c;
    }

    int findMax(int c[]) {
        int max = c[0];
        int max_i = 0;
        for (int i = 1; i < c.length; i++) {
            if (c[i] > max) {
                max = c[i];
                max_i = i;
            }
        }
        return max_i;
    }
}

这篇关于返回的数字输出不来预期?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆