方法 - 坚持下去

时间:2012-11-23 06:14:33

标签: java loops methods

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当我运行程序时,矩形只产生一次,所以我认为我的keepGoing方法存在问题。 任何帮助,将不胜感激, 谢谢!

5 个答案:

答案 0 :(得分:4)

if (input == "y")

始终将字符串与equals()

进行比较

你需要

if ("y".equals(input))

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

相应地更改其他支票。

答案 1 :(得分:2)

是的,几乎没有问题: -

  • 首先,您使用==运算符比较字符串,该运算符始终为false。使用equals方法: -

    if (input.equals("y"))   // or,   if (input.equalsIgnoreCase("y"))
    
  • 其次,您不应该以您使用的方式使用scan.next()方法。您的第一个scan.next应该被分配到input,因为您的第二个scan.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

答案 2 :(得分:1)

始终将字符串与.equals()

进行比较
 if (input == "y")

替换为

 if (input.equals("y"))

答案 3 :(得分:1)

您正在使用==运算符检查两个字符串是否相等。始终,使用equals方法检查字符串相等性。

if (input == "y")

应该是

if (input.equals("y"))

以及其他地方,

==运算符检查两个String引用是否指向同一个String对象。 equals方法确定两个String对象是否有意义相等。

答案 4 :(得分:1)

此代码:

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

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

}

应该解决问题。请记住,Java中的对象是通过引用进行比较,而不是通过值进行比较。