我的程序应该从文件中读取动物名称,并确定它们是否在字典中的walrus
和dinosaur
之间。我认为这个程序是正确的。
但是,我一直收到错误的输出,我假设我的问题发生在compare.to
方法和我的if
语句中。
如果有人想知道,我需要使用字符数组。
有人可以向我解释我的计划有什么问题吗?
Scanner inFile = null;
try {
// will read this file
inFile = new Scanner (new File("Prog505c.dat"));
}
// will print file not found if no file is found and will also exit the program.
catch (FileNotFoundException e) {
System.out.println ("File not found!");
System.exit (0);
}
String strLine = " ";
int Scope;
do {
strLine=inFile.nextLine() ;
char[] animals = strLine.toCharArray();
String dino = "Dinosaur";
char[] dinosaur = dino.toCharArray();
String wal = "Walrus";
char[] walrus = wal.toCharArray();
int ResultOne =animals.toString().compareToIgnoreCase(walrus.toString());
int ResultTwo =animals.toString().compareToIgnoreCase(dinosaur.toString());
if (ResultOne > 0&& ResultTwo < 0) {
System.out.println(strLine +" Not between");
} else {
System.out.println(strLine + " between");
}
}while (inFile.hasNextLine()) ;
我的输出是
Vampire between
Monkay between
Elephant between
Ape Not between
Lion between
Hippopotamus between
Ant between
Zebra between
Yak between
Antelope between
Dingo between
Whale between
我的输出应该是
Vampire between
Monkey between
Elephant between
Ape not between
Lion between
Hippopotamus between
Ant not between
Zebra not between
Yak not between
Antelope not between
Dingo not between
Whale not between
答案 0 :(得分:1)
这一行是你的问题:
if (ResultOne > 0&& ResultTwo < 0)
这是检查字符串是否在“海象”之后和“恐龙”之前,这显然是不可能的。该检查永远不会通过,因此它总是进入else
块并打印“之间”。要解决此问题,只需将&&
更改为||
。
答案 1 :(得分:0)
1)使用Conditional-OR和
2)从char[]
转换为String
时,请使用new String(charArray)
代替toString()
,因为数组不会覆盖toString.
(PS Whoever give你这项任务希望你理解并学习这个概念。)
答案 2 :(得分:0)
如果你有一个不可能的选择,你需要重新组织它:
if (ResultOne < 0 && ResultTwo > 0)
{//here between}
else
{here not between}
因为你需要if
永远不可能,因为你需要一个恐龙以下的世界,同时还需要华尔兹。
答案 3 :(得分:0)
您的代码存在的问题是,它将整个输入字符串与您正在比较的整个字符串(即)进行比较&#34; Vampire&#34;用&#34;恐龙&#34;和#34;海象&#34;这里:
int ResultOne =animals.toString().compareToIgnoreCase(walrus.toString());
int ResultTwo =animals.toString().compareToIgnoreCase(dinosaur.toString());
这就是为什么它将输出作为&#34;之间的&#34;每次,因为你的代码有&#34;之间&#34;在else语句中,当你的条件不满意时将执行。在你的情况下,海象,恐龙和吸血鬼并不相同。
实际上你需要将输入字符串的第一个字符与恐龙和海象的第一个字符进行比较。所以代码应该是这样的:
int ResultOne =String.valueOf(animals[0]).compareToIgnoreCase(String.valueOf(dinosaur[0]));
int ResultTwo =String.valueOf(animals[0]).compareToIgnoreCase(String.valueOf(walrus[0]));
你的if条件应该是这样的:
if (!(ResultOne > 0 && ResultTwo < 0))
希望这有帮助!