#java
#java
Вопрос:
Моя задача — написать программу, которая запрашивает у пользователя положительное целое число, а затем запрашивает выбор для решения одного из следующих действий:
- отображать все простые числа, меньшие или равные введенному числу
- отображать только простые множители числа
- определите, является ли ввод идеальным квадратом или нет
- введите следующее целое число
Программа должна выполняться в цикле для получения пользовательского ввода, пока пользователь не решит выйти. Пользователю должно быть предложено повторно ввести параметр, если введено недопустимое значение. Загвоздка в том, что мне нужно написать метод для каждого действия. Я сделал все, кроме последней части, которая заключается в создании метода, который запрашивает у пользователя следующее целое число. Я не могу заставить сканер в main
методе распознаваться в другом методе изменения целых чисел. Не уверен, что делать, или мне нужно объявить новый Scanner
.
import java.util.Scanner;
public class Assign04{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int userInt = 1;
outer: while (userInt != 0) {
System.out.println("nEnter a number: ");
userInt = input.nextInt();
if (userInt == 0) {
break;
}
else if (userInt < 0) {
System.out.println("Please enter a positive integer.");
continue;
}
//user prompt
else{
while (userInt != 0) {
System.out.println("Select one of the following options: ");
System.out.println("Enter 1 to print all prime numbers less than " userInt);
System.out.println("Enter 2 to print all prime factors of " userInt);
System.out.println("Enter 3 to determine if " userInt " is a perfect square.");
System.out.println("Enter 4 to reenter the integer");
System.out.println("n");
System.out.println("Enter 0 to exit");
int userChoice = input.nextInt();
//switch case for userChoice
switch(userChoice) {//prime number finder
case 1:
primeNumbersLess (userInt);
break;
case 2: //prime factor finder
primeFactors(userInt);
break;
case 3: // perfect square calculator
perfectSquareTester(userInt);
break;
case 4:
newInt(userInt);
break;
case 0: //exit system
System.out.println("Program ended, Goodbye.");
System.exit(0);
break;
default:
System.out.println("Incorrect input please try again");
continue;
}
break;
}
}//switch case ends
} //while loop ends
}//main method ends
public static void primeNumbersLess (int xy) {
System.out.println("All prime numbers less than " xy " are:");
int i = 2; // counter variable which will test all numbers less than userInt for primeness
while (i < xy) {
boolean isPrime = true; //isPrime will only be true when i % j =/= 0 (when not divisible by others)
//test to see whether number is prime
for (int j = 2; j <= i / 2; j ){
if (i % j == 0) { // if true number isn't prime
isPrime = false;
break;
}
}
if (isPrime) {
System.out.print(i ",t");
}
i ;
}
}//primeNumbersLess method ends
//factors method take san integer an ddisplays its integer
public static void primeFactors (int ab) {
System.out.println("All prime factors of " ab " are:");
for (int b = 2; b <= ab; b ){
while (ab % b == 0) { // is userInt is divisible by b then nothing will happen(only when )
System.out.print(b ",t");
ab = ab / b; //divides user input to compare it to prime number finder (b)
}
}
}// primeFactors method ends
public static void perfectSquareTester (int cd) {
double x = (Math.sqrt(cd));
if (x == (int)x) { //if loop which compares int data value of x to the double data value of x
System.out.println(cd " is a perfect square.");
}
else {
System.out.println(cd " is not a perfect square");
}
}//prefectSquareTester method ends
public static int newInt (int userInt, Scanner input) {
System.out.println("Enter an integer");
userInt = input.nextInt();
}
}// class ends
Комментарии:
1. Либо передайте сканер в качестве параметра, либо сделайте сканер статической переменной объекта Assign04,
public static scanner = new Scanner(System.in);
. Затем вы можете получить к нему доступ за пределами вашего основного метода какAssign04.scanner
Ответ №1:
Вам вообще не нужен метод newInt()
.
Вам не нужно break
выходить из while
цикла (за исключением случаев, когда пользователь вводит 0
)
Вот ваш код без строк, которые вам не нужны.
Скопируйте его, скомпилируйте и запустите, чтобы убедиться в этом сами.
import java.util.Scanner;
public class Assign04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int userInt = 1;
int userChoice = 0;
outer: while (userInt != 0) {
System.out.print("Enter a number: ");
userInt = input.nextInt();
input.nextLine();
if (userInt == 0) {
break;
}
else if (userInt < 0) {
System.out.println("Please enter a positive integer.");
}
else {
while (userChoice != 4) {
System.out.println("Select one of the following options: ");
System.out.println("Enter 1 to print all prime numbers less than " userInt);
System.out.println("Enter 2 to print all prime factors of " userInt);
System.out.println(
"Enter 3 to determine if " userInt " is a perfect square.");
System.out.println("Enter 4 to enter another integer.");
System.out.println();
System.out.println("Enter 0 to exit");
userChoice = input.nextInt();
input.nextLine();
switch (userChoice) {
case 1:
primeNumbersLess(userInt);
break;
case 2:
primeFactors(userInt);
break;
case 3:
perfectSquareTester(userInt);
break;
case 4:
userChoice = 0;
continue outer;
case 0:
System.out.println("Program ended, Goodbye.");
System.exit(0);
break;
default:
System.out.println("Incorrect input please try again");
}
}
}
}
}
public static void primeNumbersLess(int xy) {
System.out.println("All prime numbers less than " xy " are:");
int i = 2;
while (i < xy) {
boolean isPrime = true;
// test to see whether number is prime
for (int j = 2; j <= i / 2; j ) {
if (i % j == 0) { // if true number isn't prime
isPrime = false;
break;
}
}
if (isPrime) {
System.out.print(i ",t");
}
i ;
}
System.out.println();
}
public static void primeFactors(int ab) {
System.out.println("All prime factors of " ab " are:");
for (int b = 2; b <= ab; b ) {
while (ab % b == 0) {
System.out.print(b ",t");
ab = ab / b;
}
}
System.out.println();
}
public static void perfectSquareTester(int cd) {
double x = (Math.sqrt(cd));
if (x == (int) x) {
System.out.println(cd " is a perfect square.");
}
else {
System.out.println(cd " is not a perfect square");
}
}
}
Комментарии:
1. я ценю сокращение ненужных частей, но все, что мне нужно, это userInt, чтобы оставаться в памяти программы до тех пор, пока пользователь не решит изменить целочисленное значение (с регистром 4) или завершить программу.
2. @javahelp Я отредактировал код Java в своем ответе.