2

更新 ユーザーが初めて「1」などを選択すると、メニューが再度表示されます。次に選択が行われると、支払い情報が循環し始めます。サイクリングが完了し、メニューが再び表示されると、正常に機能します。また、選択が循環し始めた最初の2年間ではなく、最初の2年間が出力されますが、その後、意図したとおりに一度に1年間出力されます。

//create scanner object for choosing a loan, then prompt for and accept input
    Scanner choose = new Scanner(System.in);
    String choice;
    System.out.println("\nType 1, 2, or 3 and press enter to see the monthly payment information for the respective loan. To end the program type \"end\".");
    choice = choose.next();

    //cycle loan 1 payment information
    //create scanner object to advance to the next year's payments

    //loop for cycling payment information
    //initialize loan principal to variable

    while (!"end".equals(choice)) {
        System.out.println("\nType 1, 2, or 3 and press enter to see the monthly payment information for the respective loan. To end the program type \"end\".");
        choice = null;
        choice = choose.next();
        if ("1".equals(choice)) {
           //calculation code
                    }
                if (j < 6) {
                    System.out.println("Press enter to get the mortgage information for year " + (j + 2));
                    choice = choose.nextLine();
                } else {
                    System.out.println("Congratulations, your mortgage has been paid off.");
                }

            }

            choice = null;
        }
        if ("2".equals(choice)) {
            //calculation code
                }
                if (j < 14) {
                    System.out.println("Press enter to get the mortgage information for year " + (j + 2));
                    choice = choose.nextLine();
                } else {
                    System.out.println("Congratulations, your mortgage has been paid off.");
                }

            }

            choice = null;
        }
        if ("3".equals(choice)) {
            //calculation code
                }
                if (j < 29) {
                    System.out.println("Press enter to get the mortgage information for year " + (j + 2));
                    choice = next.nextLine();
                } else {
                    System.out.println("Congratulations, your mortgage has been paid off.");
                }

            }

            choice = null;
        }
    }
    choose.close();
}

}

4

4 に答える 4

5

私は前もって3つの問題を見ることができます:

  1. System.inストリームに2台のスキャナーは必要ありません。このステートメントを削除して、インスタンスScanner next = new Scanner(System.in);を使用してください。choose

  2. 入力スキャナーをとしてnext.close();閉じると、入力ストリームも閉じSystem.inられ、ストリームを再度読み取ることができなくなる可能性があります。プログラムが完全に終了した場合にのみ、ストリームを閉じるようにしてください。

  3. メソッドを使用して、としてequals条件を比較します。リテラルを最初の引数として置くと、のnull値が処理されます。whilewhile(!"end".equals(choice))"end"choice

編集:

高レベルで変更されたコード:

    Scanner choose = new Scanner(System.in);
    String choice= null;
    int j = 0;
    while (!"end".equals(choice)) {
        System.out.println("\nType 1, 2, or 3 and press enter to see the monthly payment information for the respective loan. To end the program type \"end\".");
        choice = choose.nextLine();
        if ("1".equals(choice)) {
           //calculation code
               if (j < 6) {
                    System.out.println("Press enter to get the mortgage information for year " + (j + 2));
                    choice = choose.nextLine();
                } else {
                    System.out.println("Congratulations, your mortgage has been paid off.");
                }
            choice = null;
        }
        if ("2".equals(choice)) {
                if (j < 14) {
                    System.out.println("Press enter to get the mortgage information for year " + (j + 2));
                    choice = choose.nextLine();
                } else {
                    System.out.println("Congratulations, your mortgage has been paid off.");
                }
            choice = null;
        }
        if ("3".equals(choice)) {
                if (j < 29) {
                    System.out.println("Press enter to get the mortgage information for year " + (j + 2));
                    choice = choose.nextLine();
                } else {
                    System.out.println("Congratulations, your mortgage has been paid off.");
                }
            choice = null;
        }
    }
    choose.close();
于 2012-11-27T03:03:04.243 に答える
1

1つのバグは、文字列の同等性が==と同じではないことです。.equals()を使用する必要があります:

while (!choice.equals("end")) {

お役に立てば幸いです。

于 2012-11-27T03:00:42.047 に答える
1

に設定choiceしてnullいるので、choice != "end"常にtrueです。whileループの外側に移動next.close(); choice = nullします。また、weolfe91が言ったこと。

于 2012-11-27T03:01:45.667 に答える
1

java.util.Scannerをインポートします。

クラスメイン

{{

public static void main(String [] args)

  {

    Scanner sc=new Scanner(System.in);

    System.out.println("Enter no.1:");

    int a=sc.nextInt();

    System.out.println("Enter no.2:");

    int b=sc.nextInt();

    boolean exit=false;

    do
    {
      System.out.println("1.addition");
      System.out.println("2.subtraction");
      System.out.println("3.multiplication");
      System.out.println("4.division");
      System.out.println("5.exit");
      System.out.println("choose one!");
      Scanner sd=new Scanner(System.in);
      System.out.println("enter your choice");
      int num=sd.nextInt();
      switch(num)
     {
       case 1:
       int add=a+b;
       System.out.println("addition="+add);
       System.out.println("\n");
       break;

       case 2:
       int sub=a-b;
       System.out.println("subtraction="+sub);
       System.out.println("\n");
       break;

       case 3:
       int mul=a*b;
       System.out.println("multilpication="+mul);
       System.out.println("\n");
       break;

       case 4:
       int div=a/b;
       System.out.println("division="+div);
       System.out.println("\n");
       break;

       case 5:
       exit=true;
       break;
      }
    }while(!exit);
}

}

于 2013-07-29T10:56:03.943 に答える