0

どの変数にも stop を入力しない限り、while ループ内の配列に 3 つの異なる変数を入力しようとしています。while ループは、1 番目の変数が停止していない場合に 2 番目の変数値を入力できるようにするだけであり、3 番目の変数値を入力する場合も同様です。

現在、最初のループはうまくいき、3 つの変数すべてを入力できますが、2 回目と 3 回目の for ループは最初の変数を出力しますが、2 番目の変数にスキップする前に値を入力することはできません。私が意味することの例:

  1. 名前:afasdf

  2. 追加情報:afdsaf

  3. 単価:123123214

  4. name: extra info: adflskjflk また、Stop を入力してもループが終了しない

  5. 単価:123217

このループは、変数が 1 つしかないときに機能することを知っています。while ループの代わりに for ループを使用して、大量の else ステートメントを追加しようとしましたが、同じままのようです。

ブレーカーの設定方法に問題がありますか? 最後のブレーカー (double 変数を停止しても停止するブレーカー) をセットアップする方法は、残りのループを台無しにしますか?

どうもありがとうございます

ここに私のコードがあります

ArrayItem s = new ArrayItem(); 

String Name = null, ID = null;  
double Money = 0;

boolean breaker = false;
while(breaker ==false)
{
   System.out.print("Name:" + "\t");
   Name = Input.nextLine();

   if(Name.equals("Stop")) //see if the program should stop
       breaker = true;

   System.out.print("Extra Info:" + "\t");
   Details = Input.nextLine();

   if(ID.equals("Stop")) 
       breaker = true;

   System.out.print("Unit Cost:" + "\t");
   Money = Input.nextDouble();

   // suppose to let me stop even if i input stop
   //  when the variable is suppose to be a double
   if(Input.equals("stop") || Input.equals("stop"))
      breaker = true;
   else
      s.SetNames(Name);

   s.SetInfo(Details);
   s.SetCost(Money);
}
4

2 に答える 2

1

コードに関するいくつかのこと:"Name:" + "\t"単純化することができます"Name:\t"。これは、残りのコードにも当てはまります。Java では、最初の単語が小文字であるキャメルケースを使用するのが通例です。たとえば、 にs.SetMoneyなりますs.setMoneyMoneyまた、変数は、 would bemoneyIDwould beの場合と同じ規則に従いますid。先生が別の方法で教えている場合は、そのスタイルに従います。

ループは do-while ループでもある必要があります。

do
{
    // read each value in sequence, and then check to see if you should stop
    // you can/should simplify this into a function that returns the object
    // that returns null if the value should stop (requiring a capital D
    // double for the return type)

    if ( /* reason to stop */)
    {
        break;
    }

    s.setNames(name);
    s.setId(id);
    s.setMoney(money);

} while (true);

private String getString(Scanner input)
{
    String result = input.nextLine();

    // look for STOP
    if (result.equalsIgnoreCase("stop"))
    {
        result = null;
    }

    return result;
}

private Double getDouble(Scanner input)
{
    Double result = null;
    // read the line is a string looking for STOP
    String line = getString(input);

    // null if it's STOP
    if (line != null)
    {
        try
        {
            result = Double.parseDouble(line);
        }
        catch (NumberFormatException e)
        {
            // not a valid number, but not STOP either!
        }
    }

    return result;
}

そこには多くの概念がありますが、進歩するにつれて役立つはずです。パーツを組み立てさせていただきます。

また、ブラケットを修正する必要がありましたが、それだけではありません。Moneyは であるためdouble、値を として読み取る必要がありますStringInput私はそれがScannerオブジェクトであると思われるので、そうInput.hasNextDouble()でないかどうかを確認してから、条件付きでString値をチェックして「停止」かどうかを確認できます(注:等しくない「停止」と「停止」をチェックしています)。最後のノーチャンスチェックは、スキャナーを「停止」と比較しますが、これは決して真実ではありません. 小切手

System.out.print("Unit Cost:\t");

if (Input.hasNextDouble())
{
    Money = Input.nextDouble();

    // you can now set your object
    // ...
}
// it's not a double; look for "stop"
else if (Input.nextLine().equalsIgnoreCase("stop"))
{
    // exit loop
    break;
}

// NOTE: if it's NOT a double or stop, then you have NOT exited
//       and you have not set money
于 2012-07-10T04:12:14.543 に答える
0
breaker = true;
while(breaker){
   Name = readInput("Name");
   Details = readInput("Details");
   Money = Double.parseDouble(readInput("Money"));

   if(Name.equals("stop") || Details.equals("stop"))
       breaker = false;
   else {
      // set ArrayItem
   }
}

private static String readInput(String title){
   System.out.println(title+":");
   //... read input
   // return value
}
于 2012-07-10T04:13:16.490 に答える