использование сканера в нескольких методах

#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 в своем ответе.