После поиска множества способов перезапуска программы Java внутри себя, цикл while казался самым простым. Вот пример базовой программы калькулятора Я пытаюсь это с:Проблема с попыткой перезапустить мою Java-программу
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();
}
}
Однако, это, кажется, выбросить NoSuchElementException в конце первого тайма через петлю, и происходит сбой программы. Функция этого класса состоит в том, чтобы взять исходный ввод от пользователя, чтобы определить, какой класс использовать, который определит, какую математическую операцию выполнить. Все работает отлично без петли 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)
Я также попытался просто иметь другие классы отсылают к этому, но так как основной статический метод, я не могу получить доступ к этому, как я предназначенный.
Обратите внимание, что я немного новичок на Java, поэтому моя программа довольно проста, поэтому старайтесь держать ее простой, если она может быть, или почтовый код, а затем в DETAIL объясните, что это значит, поэтому я может не только исправить эту проблему, но и будущие.
Спасибо!
EDIT:
Код отформатирован лучше в моем редакторе. Брекеты выходили на странные позиции, когда я разместил их здесь.
Поскольку очевидно 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();
}
}
как насчет публикации исключения? – John3136
Вы могли бы лучше форматировать код. Отступ неправильный, и неясно, где «пока» заканчивается где. – tom