【问题标题】:My loop won't let me enter user input to end the loop :( (java)我的循环不允许我输入用户输入来结束循环:((java)
【发布时间】:2013-10-21 14:30:35
【问题描述】:

好的,基本上,我将所有方法都连接起来,一切看起来都很好(通过我的笨拙的眼睛)。我有一个循环并询问用户是否要继续。我最初有一个基于 y/n 输入的 if else 语句。如果输入 n,我会使用 break;陈述。但是,我在注释//这不起作用的行中初始化了扫描仪和打印语句。为什么一旦我输入它就不会让我输入一些东西?

主类


import java.util.Scanner;
public class Triangle
{
    public static void main (String[]args)  
    {
        Scanner input = new Scanner(System.in);
        int x, y, z;
        for (int loop = 1; loop <= Integer.MAX_VALUE; loop++)
        {
            System.out.println("Please enter the 3 sides of the triangle.");
            x = input.nextInt();
            y = input.nextInt();
            z = input.nextInt();
            boolean goAgain;
            String userInput;

            TriMethods triTest = new TriMethods(x, y, z);

            System.out.println("You entered a triangle with the sides " + triTest.toString() + ": ");

            triTest.isEqual();
            triTest.isIsos();
            triTest.isScal();

            System.out.println("Would you like to go again? y/n");

            String answer = userInput.nextLine(); //THIS DOESN'T WORK

        }
    }
}

二等


public class TriMethods {

    int side1;
    int side2;
    int side3;

    public TriMethods(int x, int y, int z)
    {
        side1 = x;
        side2 = y;
        side3 = z;
    }

    public int longSide()
    {
        int longSide = side1;

        if (side2 >= longSide && side2 >= side3)
        {
            longSide = side2;
        }
        else if (side3 >= side2 && side3 >= side2)
        {
            longSide = side3;
        }
        return longSide;
    }

    public void shortSide()
    {
        int shortSide = side1;

        if (side2 <= shortSide && side2 <= side3)
        {
            shortSide = side2;
        }
        else if (side3 <= side2 && side3 <= side2)
        {
            shortSide = side3;
        }

        System.out.println("The long side is " + shortSide);
    }

    public void isEqual()
    {
        if (side1 == side2 && side1 == side3 && side2 == side3)
        {
            System.out.println("This triangle is equalateral");     
        }
    }

    public void isIsos()
    {
        if (side1 == side2 && side1 != side3)
        {
            System.out.println("This triangle is isosceles");
        }
        else if (side1 == side3 && side1 != side2)
        {
            System.out.println("This triangle is isosceles");
        }
        else if (side2 == side1 && side2 != side3)
        {
            System.out.println("This triangle is isosceles");
        }
        else if (side2 == side3 && side2 != side1)
        {
            System.out.println("This triangle is isosceles");
        }
    }

    public void isScal()
    {
        if (side1 != side2 && side1 != side3 && side2 != side3)
        {
            System.out.println("This triangle is scalene");
        }
    }

    public String toString()
    {
        return (side1 + " " + side2 + " " + side3);
    }

}

【问题讨论】:

  • 你打电话给userInput.nextLine()而不是input.nextLine()
  • 不,可能是剪切和粘贴错误。 userInput.nextLine() 不会编译。
  • 问题是从最后一个nextInt()Scanner 中还有一个换行符。有人想把它变成一个好的答案吗?
  • 大卫,我以前听说过这个错误。不知道如何解决。
  • @user2875661 几天前我用Scanner 回答了一个类似的问题。查看stackoverflow.com/questions/19331426/…

标签: java class loops methods


【解决方案1】:

在得到三角形的边后尝试使用input.nextLine();,当你按下回车键时这会消耗新的一行。

试试

public class Triangle
{
    public static void main (String[]args)

    {

        int x, y, z;
        String proceed="";
        do
        {
             Scanner input = new Scanner(System.in);
        System.out.println("Please enter the 3 sides of the triangle.");

        x = input.nextInt();
        y = input.nextInt();
        z = input.nextInt();
        boolean goAgain;
        String userInput;

        TriMethods triTest = new TriMethods(x, y, z);

        System.out.println("You entered a triangle with the sides " + triTest.toString() + ": ");

        triTest.isEqual();
        triTest.isIsos();
        triTest.isScal();
        input.nextLine();
        System.out.println("Would you like to go again? y/n");

        proceed = input.nextLine(); //THIS DOESN'T WORK

        }while (!proceed.equalsIgnoreCase("n"));
    }
}

【讨论】:

  • 好的,成功了!很确定答案在于使用 input.nextLine() 清除它!
【解决方案2】:

基本上你的字符串userInput 没有值。可能您想使用Scanner 来获得价值

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2015-05-30
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多