2016-01-27 3 views
-2

Новый номер не переключается, и я не уверен, почему он читается просто отлично, но не займет место старого номера.Получение нового номера от пользователя

private static void newNumber(int num, Scanner kb) 
{   
    System.out.println("Enter in a value: "); 
    num = kb.nextInt(); 

    if (num < 0) 
    { 
     System.out.println("Number not accepeted, enter a non negative number"); 
    } 
    else 
    { 
     System.out.println("New number you entered was: " + num); 
    } 
} 
+0

Что должна делать функция 'newNumber'? Замените параметр 'num' номером, который пользователь вводит в качестве ввода? – brandaemon

+0

Он должен заменить номер, введенный пользователем в начале кода, с новым номером, введенным пользователем ... например, если они ввели 8 в начале, а затем из меню выбрано изменить номер, который необходимо заменить 8 с новым номером, который они набрали с кодом, введенным вверху – Tav

+0

. Измените свой вопрос, чтобы это было ясно. Вы можете включить вызов функции, чтобы проиллюстрировать вашу точку. – brandaemon

ответ

0

Почему вы используете метод nextInt()? Вы можете просто сделать num++ Вот что я хотел бы сделать:

private static void newNumber(int num) 
{   
    num++; 

    if (num < 0) 
     System.out.println("Number not accepeted, enter a non negative number"); 

    else 
     System.out.println("New number you entered was: " + num); 
} 

Кроме того, так как это метод, вы должны получать пользовательский ввод перед методом, и положить его через в качестве аргумента, что у вас есть настроен, но никогда не используется.

+0

У меня уже есть код, в котором код запрашивает у пользователя номер, его код типа меню и один из вариантов - пользователь вводит новый номер, чтобы заменить его старым номером, который они ввели в начале. И сейчас код просто считывает номер, выполняет SOP и возвращается в меню опций. – Tav

0

Java является pass by reference. Вы не можете изменить значение примитивного типа (например, целое число), передав его в функцию, потому что значение этой переменной передается в функцию, а не указатель на нее. Все, что вы меняете в функции, происходит только внутри функции. Вы можете исправить свою проблему одним из двух способов:

Решение 1: Измените свою функцию, чтобы вернуть значение и назначить переменную, необходимую для изменения в результате вызова функции. Функция будет выглядеть следующим образом:

private static void newNumber() 
{   
    int userInput; 
    // get user input, error check 
    return userInput; 
} 

А вызов будет выглядеть следующим образом:

myInt = newNumber(); 

Примечание вам не нужно проходить в Scanner или int, как вы можете положить, что все в newNumber функция (если вы не хотите повторно использовать объект Scanner, который вы создали ранее).

Решение 2: Инкапсулируйте int в классе. Это, вероятно, не нужно и слишком сложно для этой проблемы, но если вы создадите класс с int внутри него, вы можете создать в нем объект с вашим int внутри, передать указатель на этот объект в функцию и использовать этот указатель как он все равно укажет на объект, который вы создали ранее.

Смежные вопросы