1
import java.util.Scanner;
public class InteractiveRectangle
{
public static void main(String[] args)
{
    do 
    { 
        int length = readInteger ("For Length ");
        System.out.println();
        int width = readInteger ("For Width ");
        printRectangleDetails(length,width);// existing code goes here 
    } 
    while (keepGoing()); 

    System.out.println("Goodbye, friend"); 
}


/**
 * returns the details of the rectangle
 * @param height the height of the rectangle
 * @param width the width of the rectangle
 */
public static void printRectangleDetails (int length, int width)
{
    System.out.println ("This is the length of the rectangle " + length);

    System.out.println ("This is the width of the rectangle " + width);

    System.out.println (("This is the perimeter of the rectangle " + (length + width)));

    System.out.println (("This is the area of the rectangle " + (length * width)));
}

/**
 * Read in an integer and return its value
 * @param the prompt to be shown to the user
 */
public static int readInteger(String prompt)
{
    System.out.println (prompt);
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter an integer");

    while (!scan.hasNextInt()) // while non-integers are present
    {
        scan.next();
        System.out.println ("Bad input. Enter an integer.");
    }
    int input = scan.nextInt();
    return input;
}

/**
 * Read a positive integer and return its value
 * @param the prompt to be shown to the user
 */
public static int readPositiveInteger(String prompt)
{
    System.out.println (prompt);
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter an integer");
    boolean positive = false;

    while (scan.hasNextInt() && positive == false)
    {
        int input = scan.nextInt();
        if (input > 0)
        {
            positive = true;
            {
                return input;
            }
        }
        else
        {
            System.out.println ("Bad input enter an integer.");
            positive = false;
            scan.nextLine();

        }

    }
    return 0;
}

/**
 * Ask the user whether or not to spawn another rectangle
 * and returns the result as a boolean
 */
public static boolean keepGoing()    
{
    Scanner scan = new Scanner(System.in);
    boolean inputRead = false;
    boolean result = false;
    System.out.println ("Do you want to process another rectangle?"); 
    scan.next();
    String input = scan.next();

    if (input == "y")
    {
        inputRead = true;
        result = true;

    }
    else if (input == "n")
    {
        inputRead = true;
        result = false;

    }
    else
    {
        System.out.println("Bad input please try again!");
        scan.nextLine();
    }
    return result;

}

}

別の四角形を生成するかどうかをユーザーに尋ね、ユーザーがこの質問に「n」で答えるまで続けます。Atm プログラムを実行すると、長方形が 1 回しか生成されないので、keepGoing メソッドに問題があると思います。助けていただければ幸いです、ありがとう!

4

5 に答える 5

4

if (input == "y")

常に文字列を比較しますequals()

あなたが必要

if ("y".equals(input))

また

if ("y".equalsIgnoreCase(input)) // will also allow Y

それに応じて他のチェックを変更します。

于 2012-11-23T06:15:41.183 に答える
2

はい、いくつかの問題があります: -

  • まず==、演算子を使用して文字列を比較していますが、これは常に false になります。使用equals方法:-

    if (input.equals("y"))   // or,   if (input.equalsIgnoreCase("y"))
    
  • scan.next()第二に、あなたが使用している方法でメソッドを使用するべきではありません。2番目に改行が含まれているため、最初のscan.nextものをに割り当てる必要があります: -inputscan.next

    System.out.println ("Do you want to process another rectangle?"); 
    // scan.next();  // Should not be here.
    String input = scan.next();
    scan.next();     // Change the order
    

    または、次を使用しますscan.nextLine(): -

    System.out.println ("Do you want to process another rectangle?"); 
    String input = scan.nextLine();
    
  • 第三に、あなたの側では、そこで入力を読み取るのではなく、メソッドを再度else呼び出すことができます: -keepGoing

    else
    {
        System.out.println("Bad input please try again!");
        return keepGoing();
    }
    
  • また、if-else変数にブール値を設定するのではなく、そこから直接戻ることができます。

したがって、全体として、次のように変更できますif-else if-else: -

if (input.equals("y")) {
    return true;
}
else if (input.equals("n")) {
    return false;
}
else
{
    System.out.println("Bad input please try again!");
    return keepGoing();
}

そして、これらのboolean変数は必要ありません: -inputReadresult. それらを削除するだけです。returnの最後からステートメントを削除しますmethod。今のようにunreachable code

于 2012-11-23T06:18:38.697 に答える
1

文字列を常に .equals() と比較する

 if (input == "y")

に置き換えます

 if (input.equals("y"))
于 2012-11-23T06:16:41.170 に答える
1

==演算子を使用して、2 つの文字列が等しいかどうかを確認しています。常に equals メソッドを使用して文字列の等価性を確認してください。

if (input == "y")

する必要があります

if (input.equals("y"))

残りの場所でも

==演算子は、2 つの文字列参照が同じ文字列オブジェクトを指しているかどうかをチェックします。equals メソッドは、2 つの String オブジェクトが有意に等しいかどうかを判断します。

于 2012-11-23T06:17:26.257 に答える
1

このコード:

if (input.equals("y"))
{
    inputRead = true;
    result = true;

}
else if (input.equals("n"))
{
    inputRead = true;
    result = false;

}

問題を解決する必要があります。Java のオブジェクトは、値ではなく参照によって比較されることに注意してください。

于 2012-11-23T06:18:23.643 に答える