Java查找字符串数组中的某个数字

时间:2015-12-11 20:50:42

标签: java

我目前正在完成一项任务。我需要做的是接收用户提供的文件,因此它将是here,并且从那里它将接收一个数字,流行度,寻找,之后它将接受看看的十年。我需要做的是在行内找到对应于所选十年的所述名称的受欢迎程度。

我的代码是:

import java.util.*;
import java.io.*;

public class FiletoArray {
public static void main(String[] args) throws FileNotFoundException
{

    Scanner console = new Scanner(System.in);
    System.out.print("Input file : ");
    String inputFileName = console.next();
    File inputFile = new File(inputFileName);
    Scanner in = new Scanner(inputFile);

    System.out.print("What rank of popularity? ");
    int getPop = console.nextInt();

    System.out.println("Enter number correpsonding to your decade: ");
    System.out.println("   1 - 1900-1909");
    System.out.println("   2 - 1910-1919");
    System.out.println("   3 - 1920-1929");
    System.out.println("   4 - 1930-1939");
    System.out.println("   5 - 1940-1949");
    System.out.println("   6 - 1950-1959");
    System.out.println("   7 - 1960-1969");
    System.out.println("   8 - 1970-1979");
    System.out.println("   9 - 1980-1989");
    System.out.println("   10 - 1990-1999");
    System.out.println("   11 - 2000-2005");
    System.out.print("Decade: ");
    int getDecade = console.nextInt();



    String[] namesArray = new String[4429];

    for(int i = 0; i < 4429; i++)
    {
        namesArray[i] = in.nextLine();
    }

    int searchedValue = (int) getDecade+1;
    int pos = 0;
    int newPos = 0;
    boolean found = false;
    while (pos < namesArray.length && !found)
    {
        if(namesArray[pos].equals(getPop))
        {
            found = true;
            newPos = pos;
            System.out.println(namesArray[pos]);
        }
        else
        {
            pos++;
        }
    }
    if (found == true)
    {
        System.out.println("Found at position: " + newPos);
    }
    else
    {
        System.out.println("Not found.");
    }
}
}

目前,我只是希望它打印出来,所以我知道我得到了它。非常感谢您的帮助!

编辑: 我期待的结果是个人输入:

Input file: names.txt

What rank of popularity? 380

What decade? 10

然后结果应该弹出如下:

Aaliyah 0 0 0 0 0 0 0 0 0 380 215

不幸的是,它只是默认为: Not found.

2 个答案:

答案 0 :(得分:1)

您的输入文件不可用,但根据您的示例,它可能会失败:

if(namesArray[pos].equals(getPop))

你应该打印namesArray[pos]中真正的内容。从您的示例输出中,您正在寻找打印出Aaliyah 0 0 0 0 0 0 0 0 0 380 215的内容。好吧,这永远不会等于getPop,你要搜索的是什么,再次,你的例子是380

所以,你应该看到这永远不会成真:

"Aaliyah 0 0 0 0 0 0 0 0 0 380 215".equals(380) // ALWAYS false

相反,您需要解析namesArray[pos]字符串(在您阅读文件时,或在循环中,查看String#split()),提取值380,以及与此相比。

如果它足以仅测试包含380的行,您也可以执行String#contains()。而不是:

if(namesArray[pos].equals(getPop))

执行:

if(namesArray[pos].contains(getPop))

但是,这种方法可能会产生误报。

答案 1 :(得分:1)

您正在尝试将文件中的整行(例如Aaliyah 0 0 0 0 0 0 0 0 0 380 215)与用户输入的数字进行比较。您需要解析每个namesArray元素以获取十年的值,然后仅将相关值与getPop进行比较。

提示:您将使用getDecade值来选择“相关”值。