gpt4 book ai didi

java - 程序未正确循环

转载 作者:行者123 更新时间:2023-12-02 06:06:48 25 4
gpt4 key购买 nike

我的程序似乎工作正常,除了当它应该在询问用户运算符的部分循环时显示消息,但用户没有空间输入运算符并且它直接跳转到询问第一个数字,我不知道自己做错了什么或者没做什么。我需要帮助,请!

这是我到目前为止所拥有的:

import java.util.Scanner;

public class LabTresFinal
{

public static void main (String [] arguments)
{
Scanner Keyboard = new Scanner ( System.in );

//Declared Variables
String operator;
double more;
double number1;
double number2;
double ans;
boolean flag= true;

do
{
//Prompt user for operation and numbers
//Had to prompt for operation first otherwise my program was not runing correctly

System.out.println( "Please choose an operation to be performed: + , - , * , / , or % .");
operator = Keyboard.nextLine();
System.out.println("Enter first number");
number1 = Keyboard.nextDouble ();
System.out.println("Enter second number");
number2 = Keyboard.nextDouble ();

switch (operator)
{
case ("+"):
ans = number1 + number2;
System.out.println(number1 + " + " + number2 + " = " + ans);

break;

case ("-"):
ans = number1 - number2;
System.out.println(number1 + " - " + number2 + " = " + ans);

break;

case ("*"):
ans = number1 * number2;
System.out.println(number1 + " * " + number2 + " = " + ans);

break;

case ("/"):

if (number2 >= 1)
{
ans = number1 / number2;
System.out.println(number1 + " / " + number2 + " = " + ans);

}else if (number2 ==0)
{
System.out.println("Error: Operation cannot be performed with second number as zero, please try again");
while(flag)
{
System.out.println("Enter second number");
number2 = Keyboard.nextDouble ();
if(number2>=1)
{
ans = number1 / number2;
System.out.println(number1 + " / " + number2 + " = " + ans);
flag=false;
}else if(number2 ==0)
{
System.out.println("Error: Operation cannot be performed with second number as zero, please try again");
}
}
}

break;

case ("%"):
ans = number1 % number2;
System.out.println(number1 + " % " + number2 + " = " + ans);

break;
}

//setting loop for program to restart if user wants to
System.out.println("Again?"
+ "\n" + "enter 1 for yes"
+ "\n" + "enter 2 for no");
more = Keyboard.nextDouble();
}while (more== 1);

}}

这就是我的程序应该做的事情:

它必须:
- 基于 CLI - 继续计算每个运算符的总计(多少次加法、多少次乘法……)
- 提示用户输入 2 个数字
- 提示用户输入运算符
- 处理被零除的情况 - 执行操作
- 在屏幕上向用户显示结果
- 循环直到用户使用哨兵值
- 显示统计数据:每次操作的计数、最小值、最大值。

我知道我仍然需要做很多工作,但我现在只需要帮助解决这个问题,这样我就可以处理剩下的事情。

非常感谢。

最佳答案

这是因为,虽然 nextDouble() 跳过换行符和空格,但它在解析 token 之后(仅在之前)不会消耗换行符。因此,换行符保留在流中,下一次调用 nextLine() 会立即获取该换行符(空行)。

干净地处理此问题的一个选项是始终使用nextLine(),然后将字符串显式解析为Double(例如使用Double.valueOf)。

其他选项作为 Scanner issue when using nextLine after nextXXX 的答案给出.

顺便说一句,传统的 Java 命名约定是以小写字母开头的变量名。作为潜在混淆的一个例子,我个人第一次阅读您的代码时,我认为您正在使用一个名为 Keyboard 的静态方法类(它也混淆了 StackOverflow 的语法荧光笔)。

关于java - 程序未正确循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com