我在工作中遇到了这个小问题,想看看我是否可以编写一个小程序来解决它。显然我不能在java中写一个该死的东西。大声笑我被卡住了,但有一部分成功了。我花了两天的大部分时间试图让它运转起来没有运气。这是我的问题。我有一个txt文件,其中生成的数字为每行1-1000个数字。我想计算1和1之间的数字9的次数或频率。我的方法如下:
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
答案 0 :(得分:8)
所以我的第一个想法不是“遍历所有数字”,而是提出一种确定计数的公式化方法......请注意:
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[] ....
}