我目前正在完成一项任务。我需要做的是接收用户提供的文件,因此它将是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.
答案 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
值来选择“相关”值。