按字母顺序比较数组

时间:2017-11-30 17:51:45

标签: java arrays string

我的程序应该从文件中读取动物名称,并确定它们是否在字典中的walrusdinosaur之间。我认为这个程序是正确的。

但是,我一直收到错误的输出,我假设我的问题发生在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

4 个答案:

答案 0 :(得分:1)

这一行是你的问题:

if (ResultOne > 0&& ResultTwo < 0)

这是检查字符串是否在“海象”之后和“恐龙”之前,这显然是不可能的。该检查永远不会通过,因此它总是进入else块并打印“之间”。要解决此问题,只需将&&更改为||

答案 1 :(得分:0)

1)使用Conditional-OR和

2)从char[]转换为String时,请使用new String(charArray)代替toString(),因为数组不会覆盖toString.(PS Whoever give你这项任务希望你理解并学习这个概念。)

参考&gt; How to convert a char array back to a string?

答案 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))

希望这有帮助!