数字频率或1的数字介于1和1之间。 1000 - Java

时间:2011-09-18 23:26:38

标签: java

我在工作中遇到了这个小问题,想看看我是否可以编写一个小程序来解决它。显然我不能在java中写一个该死的东西。大声笑我被卡住了,但有一部分成功了。我花了两天的大部分时间试图让它运转起来没有运气。这是我的问题。我有一个txt文件,其中生成的数字为每行1-1000个数字。我想计算1和1之间的数字9的次数或频率。我的方法如下:

  1. 从文本文件中读取数字并将它们粘贴在一个int数组中。
  2. 将数组中spot [0]的工作号或数字转换为字符串 选择一条路线。
  3. 3-A。与charAt(0)比较为9,并在适当时增加

    3-B。将字符串转换为char数组,并将char数组中的索引0与9进行比较,并在适当时增加。

    附注:如果要比较charArray [1] =='9',则必须注释掉else。如果你评论它,它将完美地用于计算第一个数字位置的9。第二和第三位数字比较不起作用。谢谢,抱歉这个愚蠢的问题。

    生成文本文件的一种简单方法是在列1中使用excel类型,然后在第二行中使用2,然后在第三行中使用3(相同的单元格),然后突出显示所有三个数字并拖动加号包含三个细胞的右下角。这将填充到1000.我没有附加我的txt文件,因为您可以轻松生成自己的文件。

    **不是作业

    到目前为止我的代码如下:

     package com.numbers;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.util.Scanner;
    
    public class Numbers 
    {
    
     static int[] array = new int[1002];
     static char[] charArray = new char[4]; 
    
    public static void main(String[] args) throws FileNotFoundException
    {
    
        Scanner scan = new Scanner (System.in);
        System.out.print("Enter the name of the file : ");
        String whatfile = scan.nextLine();
        Scanner readnumber = new Scanner (new FileReader(whatfile));
    
        int firstDigit  =  0;
        int secondDigit =  0; 
        int thirdDigit  =  0;
    
        for (int i = 0; i < 1000; i++)
        {
                array[i] = readnumber.nextInt();                
                String testString = ""; 
    
        // System.out.println("the number being passed to parse is : " +    numberAtIndex); 
    
    
            // Approach 1 
            testString = Integer.toString(array[i]);
    
            if(testString.charAt(0) == '9')
            {
                firstDigit = firstDigit + 1; 
            }
    
    // System.out.println("test string contains : " + testString);       
    
            // Approach 2 
            charArray =  testString.toCharArray();
    
            if(charArray[0] == '9')
            {
                firstDigit = firstDigit + 1; 
    
            }
    
        /*
         * If you comment out this 'else if' it will work. please comment out one of the approaches above (use only 1) My problem is that
         * I can't seem to figure out how to search for nines in the second & third digit location. 
         * If it is in an array shouldn't I be able to compare the charArray[1] to a nine and have it increment if true?
         */
    
    else if (charArray[1] == '9')
        {
            secondDigit = secondDigit + 1; 
        }
    
    
            } //  end for 
    
     // System.out.println("this is what is stored in array spot 0 : " + array[0]);     //should      be 1
    
     System.out.println("the number of 9's in the first digit place holder is : " + firstDigit);
    System.out.println("the number of 9's in the second digit place holder is : " +   secondDigit);
    // System.out.println("the number of 9's in the third digit place holder is : " + thirdDigit);
    
    } // End of main 
    
     } // end of class
    

4 个答案:

答案 0 :(得分:8)

所以我的第一个想法不是“遍历所有数字”,而是提出一种确定计数的公式化方法......请注意:

  • 每10个数字中有1个包含9(“9”)
  • 每100个数字中有10个包含额外的9个(“90”,“91”,......)
  • 每1000个数字中有100个包含额外的9个(“900”,“901”,......)

1000中的9个数

= (1000/10)*1 + (1000/100)*10 + (1000/1000)*100 = 100*1 + 10*10 + 100*1 = 300

值得注意的是,这也为您提供了每位数的计数,第一条规则为您提供1位数的位数,第二条规则为您提供10位数的位数,第三条规则为您提供100秒内的位数。

假设您对此表示怀疑,这是一个更简洁的Java程序,通过迭代计算9秒:

int nines = 0;
for(int i = 1; i <= 1000; i++){
    for(char c : String.valueOf(i).toCharArray()){
        if(c == '9') nines++;
    }
}

答案 1 :(得分:0)

而不是

if(charArray[0] == '9')
    {
        firstDigit = firstDigit + 1; 

    }

for(char c:charArray){
    if(c == '9')
        {
            firstDigit = firstDigit + 1; 

        }
}

但是你也可以用

直接将int转换为数字(不需要文件)
int tmp=i;
while(tmp>0){
    int digit=tmp%10;//get last digit
    tmp= tmp/10;//integer division rounds down
    if(digit==9)firstDigit++
}

答案 2 :(得分:0)

您是否必须从文本文件中提取数字?试试这个:

public class NineCounter {
    public static void main(String [] args) {
        System.out.println(getNumberOfNines(1, 1000));
    }

    public static int getNumberOfNines(int from, int to) {
        if (from > to || from < 0 || to < 0) {
            return -1;
        }

        int numberOfNines = 0;
        int numberOfDigits = Integer.toString(to).length();
        for (int i = from; i < to; i++) {
            int currentNumber = i;
            for (int j = 0; j < numberOfDigits; j++) {
                if (currentNumber % 10 == 9) {
                    numberOfNines++;
                }
                currentNumber -= currentNumber % 10;
                currentNumber /= 10;
            }
        }

        return numberOfNines;
    }
}

这给出了300 9的输出。

如果必须使用文本文件,则可以对使用getNumberOfNines()的字符串生成的整数使用部分Integer.parseInt()函数。

答案 3 :(得分:0)

public static void main(){
    ...
    Scanner sc = new Scanner (new File(whatfile));
    int[] occ = new int[3];
    for(int i=0; i<3; i++) occ[i] = 0;
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine().trim();
        try {
            int num = line.parseInt(line);
            for (int j=0; j<3 && num>0; j++){
                if (num%10==9) occ[j]++;
                num /= 10;
            }
        } catch (Exception e) {}
    }
    ... print occ[] ....
}