尝试重新启动Java程序时遇到问题
在查找了许多重启Java程序的方法之后,while循环似乎是最简单的选择。下面是我正在尝试的一个基本计算器程序的示例:尝试重新启动Java程序时遇到问题,java,Java,在查找了许多重启Java程序的方法之后,while循环似乎是最简单的选择。下面是我正在尝试的一个基本计算器程序的示例: import java.util.Scanner; class a { public static void main(String args[]){ boolean done = false; int oper; Scanner input = new Scanner(System.in); System.out.println("McMack
import java.util.Scanner;
class a {
public static void main(String args[]){
boolean done = false;
int oper;
Scanner input = new Scanner(System.in);
System.out.println("McMackins Calc v2.0 (Now with fewer crashes!)");
while (!done)
{
System.out.println("What operation? (0 for quit, 1 for add, 2 for subtract, 3 for multiply, 4 for divide, 5 for divide with remainder, 6 for average, 7 for account interest):");
while (!input.hasNextInt()){
System.out.println("Enter a valid integer.");
input.next();
}
oper = input.nextInt();
switch (oper){
case 0:
done = true;
break;
case 1:
add addObject = new add();
addObject.getSum();
break;
case 2:
sub subObject = new sub();
subObject.getDifference();
break;
case 3:
times multObject = new times();
multObject.getProduct();
break;
case 4:
divide divObject = new divide();
divObject.getQuotient();
break;
case 5:
remain remObject = new remain();
remObject.getRemainder();
break;
case 6:
avg avgObject = new avg();
avgObject.getAvg();
break;
case 7:
interest intObject = new interest();
intObject.getInterest();
break;
default:
System.out.println("Invalid entry.");
break;
}
}
input.close();
}
}
然而,这似乎在第一次循环结束时抛出了一个NosTouchElementException,并使程序崩溃。该类的功能是获取用户的初始输入,以确定要使用的类,该类将确定要执行的数学运算。没有while(!done)
循环,一切正常
用法示例:
McMackins Calc v2.0 (Now with fewer crashes!)
What operation? (0 for quit, 1 for add, 2 for subtract, 3 for multiply, 4 for divide, 5 for divide with remainder, 6 for average, 7 for account interest):
1
How many addends?
1
Enter your numbers now.
1
You have entered 1 addend.
The sum is: 1.0
What operation? (0 for quit, 1 for add, 2 for subtract, 3 for multiply, 4 for divide, 5 for divide with remainder, 6 for average, 7 for account interest):
Enter a valid integer.
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at a.main(a.java:13)
我也尝试过让其他类引用这个类,但是因为main是一个静态方法,所以我无法按照我想要的方式访问它
请注意,我是一个Java初学者,这就是为什么我的程序非常简单的原因,所以如果可以的话,请尽量保持简单,或者发布代码,然后详细解释它的含义,这样我不仅可以解决这个问题,还可以解决未来的问题
谢谢大家!
编辑:
在我的编辑器中,代码的格式更好。当我把它贴在这里时,大括号出现在奇怪的位置
由于显然a
编写正确,因此这是我的add
类。希望这能澄清一些事情
import java.util.Scanner;
public class add {
public void getSum(){
Scanner input = new Scanner(System.in);
double total, addend;
int entries, count;
total = 0;
count = 0;
System.out.println("How many addends?");
while (!input.hasNextInt()){
System.out.println("Enter a valid integer.");
input.next();
}
entries = input.nextInt();
System.out.println("Enter your numbers now.");
while (count < entries){
while (!input.hasNextDouble()){
System.out.println("Enter a valid number.");
input.next();
}
addend = input.nextDouble();
total = total + addend;
count++;
if (count == 1){
System.out.println("You have entered " + count + " addend.");
}else if (count > entries){
System.out.println("You have entered too many addends! Contact program developer.");
}else{
System.out.println("You have entered " + count + " addends.");
}
}
System.out.println("The sum is: " + total);
input.close();
}
}
import java.util.Scanner;
公共类添加{
公共无效getSum(){
扫描仪输入=新扫描仪(System.in);
两倍总和,加数;
int条目,计数;
总数=0;
计数=0;
System.out.println(“有多少个加数?”);
而(!input.hasNextInt()){
System.out.println(“输入有效整数”);
input.next();
}
entries=input.nextInt();
System.out.println(“立即输入您的号码”);
while(计数<条目){
而(!input.hasNextDouble()){
System.out.println(“输入有效数字”);
input.next();
}
加数=输入.nextDouble();
总计=总计+加数;
计数++;
如果(计数=1){
System.out.println(“您已输入”+count+“加数”);
}else if(计数>条目){
System.out.println(“您输入了太多的加数!请与程序开发人员联系”);
}否则{
System.out.println(“您已经输入了”+count+“加数”);
}
}
System.out.println(“总和为:“+总计”);
input.close();
}
}
使用bufferedreader
和inputstream
而不是Scanner类。这个类创建了很多bug和错误,因为有时候它需要更多的参数,这是您所期望的。
此外:
您使用的hasNextInt
方法错误,请尝试使用布尔值和input来简化while循环。next()
应替换为input.nextLine()
另外,您应该检查,如果用户在while循环和it范围中键入integer而不是string或其他内容。如果一切正常,您应该将布尔值更改为true,并使其退出while循环
public static void main(String args[]){
boolean done = false;
int oper;
Scanner input = new Scanner(System.in);
System.out.println("McMackins Calc v2.0 (Now with fewer crashes!)");
while (!done) {
System.out.println("What operation? (0 for quit, 1 for add, 2 for subtract, 3 for multiply, 4 for divide, 5 for divide with remainder, 6 for average, 7 for account interest):");
while (!input.hasNextInt()){
System.out.println("Enter a valid integer.");
input.next();
}
oper = input.nextInt();
switch (oper){
case 0:
done = true;
break;
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
case 4:
System.out.println("4");
break;
case 5:
System.out.println("5");
break;
case 6:
System.out.println("6");
break;
case 7:
System.out.println("7");
break;
default:
System.out.println("Invalid entry.");
break;
}
}
input.close();
}
这似乎对我有效,所以可能错误与您自己的类(add、divide)等有关
另外,在创建自己的类时,最好保持惯例,将第一个字母大写,例如“add”应该是“add”
通过构建一个包含add方法、subtract方法等的通用“Operations”类,您可能会使它更易于阅读
编辑:
请尝试以下添加方法:
public static int add() {
Scanner s = new Scanner(System.in);
int counter = 0;
System.out.println("How many numbers to add?");
int numCount = s.nextInt();
for(int i = 0; i < numCount; i++) {
System.out.println("enter number");
counter += s.nextInt();
}
return counter;
}
publicstaticintadd(){
扫描仪s=新的扫描仪(System.in);
int计数器=0;
System.out.println(“要添加多少个数字?”);
int numCount=s.nextInt();
for(int i=0;i
对于想知道如何解决这个问题的未来用户,通过一些重新编程,我发现我的问题是在循环结束之前关闭输入
变量。通过让程序无限期重新启动,并在完成后仅关闭input
,此程序工作正常
感谢Benjamin的回复,我目前正在通过
for
循环清理和缩短我的代码。发布异常情况如何?您能更好地格式化代码吗。缩进是错误的,不清楚while在哪里结束。谢谢你的贡献。创建一个通用操作类听起来不是个坏主意。结果是这样的,因为我只是想练习和很多课程一起工作,这样我就习惯了。我可以发布我的add
类,如果它有助于找出我把事情搞砸的地方。没问题!是的,发布你的添加类,我来看看。很可能是因为它预期的是一个提前的整数,或者相反。Add类现在出现在主帖子中。为上面的Add方法添加了我自己的实现。与您的类似,但没有所有令人困惑的变量,虽然loopsEfficient就是这样,但它假设用户只想添加整数。此外,大量的while循环有时也会被忽略。他们检查以确保输入是有效的,并告诉他们是否输入了错误的内容。如果没有它们,如果输入字符串而不是数字,程序就会崩溃。
public static int add() {
Scanner s = new Scanner(System.in);
int counter = 0;
System.out.println("How many numbers to add?");
int numCount = s.nextInt();
for(int i = 0; i < numCount; i++) {
System.out.println("enter number");
counter += s.nextInt();
}
return counter;
}