Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序跳过输入?_Java - Fatal编程技术网

Java程序跳过输入?

Java程序跳过输入?,java,Java,你好, 我试图使用基本Java代码构建一个简单的计算器,并更好地理解OOP,因此,我写了以下内容: 导入java.util.Scanner; 公共类计算{ 公共静态无效字符串[]args{ 扫描仪输入=新的ScannerSystem.in; System.out.println输入一个数字:; int num1=input.nextInt; System.out.println输入操作:; 字符串运算器; opr=input.nextLine; ifopr==+{ System.out.prin

你好,

我试图使用基本Java代码构建一个简单的计算器,并更好地理解OOP,因此,我写了以下内容:

导入java.util.Scanner; 公共类计算{ 公共静态无效字符串[]args{ 扫描仪输入=新的ScannerSystem.in; System.out.println输入一个数字:; int num1=input.nextInt; System.out.println输入操作:; 字符串运算器; opr=input.nextLine; ifopr==+{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; op.加法; }否则,如果opr==-{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; 运算减法; }如果opr==*{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; 运算乘法; }如果opr==/{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; 执行司; }否则{ System.out.println请输入有效的操作!; } } } 还有一门数学运算课:

导入java.util.Scanner; 公营课运作{ 静态int Num1; 静态int Num2; 扫描仪输入=新的ScannerSystem.in; 公共运营{ x=Num1; y=Num2; } 公共无效添加{ System.out.printlnNum1+Num2; } 公共空白减法{ System.out.printlnNum1-Num2; } 公共空间倍增{ System.out.printlnNum1*Num2; } 公共空间司{ System.out.printlnNum1/Num2; } } 但它不接受操作的输入,直接进入下一行代码,如下所示:

Enter a number: 
4
Enter an operation: 
Please, Enter a valid operation!
谁能指出我的错误吗

注意:我是Java和编程的新手。所以,如果我的代码不是最好的,请不要介意,我还在学习。

使用 input.next 而不是 input.nextLine as nextInt接受数字和新行字符\n。
在开关ts中,检查新行字符。

您好,您遇到了一些问题。nextLine将第一次返回空行,因为nextInt仅在接收到新行字符后才使用整数,但将新行字符保留在缓冲区中。此外,equals比较需要使用opr.equals+或switch语句。最后,您的操作类构造函数将变量赋值向后。我还修改了操作私有成员变量,以遵循标准命名约定和作用域实践。您通常希望将成员变量设置为私有,因为如果不显式定义,它们将受到保护。我建议使用一个好的IDE,因为它可以为您捕获很多错误,请尝试使用免费的。这是您的代码的更新版本

公营课运作{ 私人最终int num1; 私人最终int num2; 公共运营num1,int num2{ this.num1=num1; this.num2=num2; } 公共无效添加{ System.out.printlnnum1+num2; } 公共空白减法{ System.out.printlnnum1-num2; } 公共空间倍增{ System.out.printlnnum1*num2; } 公共空间司{ System.out.printlnnum1/num2; } } 你的主课呢

公共类计算{ 公共静态无效字符串[]args{ 扫描仪输入=新的ScannerSystem.in; System.out.println输入一个数字:; int num1=input.nextInt; System.out.println输入操作:; 字符串opr=null; whileopr==null | | opr.length==0{ opr=input.nextLine; } 开关操作{ 案例+:{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; op.加法; 打破 } 案例-:{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; 运算减法; 打破 } 案例*:{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; 运算乘法; 打破 } 案例/:{ System.out.println输入另一个数字:; int num2=input.nextInt; 操作op=新操作NUM1,num2; 执行司; 打破 } 违约: System.out.println请输入有效的操作!; 打破 } } }
我认为应该注意的是,您将属性设置为私有的、非静态的,这与OOP和camelCase的代码符合standardszconventions有很大区别。我完全理解这一点。但我认为你应该在回答中解释这一点。特别是你是如何修复构造函数的OP询问了构造函数参数的属性,这完全没有任何作用我同意我已经相应地更新了答案。谢谢你的帮助。有趣的是,现在我知道我需要学习更多。但是你说变量赋值是向后的是什么意思?谢谢你的回答。你的原始代码做了这个x=Num1;将成员变量赋值给构造函数参数。使用变量名,它应该是Num1=x;