0

プログラムに、センチネル値に到達しない while ループがあります。プログラムは基本的に、string、int、および double を含むデータベースを読み取り、ループバックします。私の問題は、センチネルを読み取っていないようで、無限ループが発生することです。私はこれを何時間も修正しようとしたので、どんな支援も非常に役に立ちます. サンプル入力は、EndSearchKeys が SECSENT に等しい場合、次のようになります。

また、呼び出されたメソッドは問題ではないと仮定します。これは、既に削除して再度テストしたためです。

レクサス 2005 23678.0
フォード 2001 7595.0
ホンダ 2004 15500.0
EndSearchKeys

while(scan.hasNext())
    {
        if(carMake.equals(SECSENT))
        {
            break;
        }
        if(scan.hasNextInt())
        {
            carYear = scan.nextInt();
        }
        else
        {
            System.out.println("ERROR - not an int");
            System.exit(0);
        }
        if(scan.hasNextDouble())
        {
            carPrice = scan.nextDouble();
        }
        else
        {
            System.out.println("ERROR - not a double");
            System.exit(0);
        }
        Car key = new Car(carMake, carYear, carPrice);
        // Stores the output of seqSearch in pos.

        // If the debug switch is on, then it prints these statements.
        if(DEBUG_SW == true)
        {   
            System.out.println("Search, make = " + key.getMake());
            System.out.println("Search, year = " + key.getYear());
            System.out.println("Search, price = " + key.getPrice());
        }   
        System.out.println("key =");
        System.out.println(key);
        pos = seqSearch(carArr, count, key);
        if(pos != -1)
        {
            System.out.println("This vehicle was found at index = " + pos);
        }
        else
        {
            System.out.println("This vehicle was not found in the database.");
        }
        if(scan.hasNext())
        {
             carMake = scan.next();
        }
        else
        {
            System.out.println("ERROR - not a String");
            System.exit(0);
        }
    }
4

1 に答える 1

0

上記の回答で、センチネルをデータベースの最終値にした場合にのみ問題が発生すると述べています。これが何が起こっているかです。

ループの最後で、次のようにします。

    if(scan.hasNext())
    {
         carMake = scan.next();
    }

さて、carMake= your sentinel value.

ループが再び開始され、次のテストが実行されます。

while(scan.hasNext())

しかし、スキャンには次がありませ。上記の次に「消費」しました(前のループ反復の最後に)。現在、「次」は「ヌル」です。したがって、ループには入らず、ループの最初のテスト (以下) に到達することはありません。

    if(carMake.equals(SECSENT))
    {
        System.out.println("Found sentinel value!  Breaking!");
        break;
    }

そのテストをループの最後に移動してみてください。

または、ループの条件を次のように変更できます。

while(scan.hasNext() && !carMake.equals(SECSENT))
于 2012-12-06T03:34:16.170 に答える