2015-12-13 4 views
0

Просто узнал о вызовах и думал, что я попробую, но мой код не работает должным образом. Предполагается, что он будет иметь 2 имени и печать. Это все. Мои переменные глобальны, поэтому все мои методы должны их видеть, но когда программа запускается, она печатает «null». Может кто-нибудь объяснить, почему это не работает? Это как-то связано с передачей переменной? Я думал, что если бы это было глобально, мне бы не нужно было это делать?Методы вызова/область переменной

import java.util.Scanner; 
public class UserID { 

String firstName; 
String secondName; 

public void readNames(){ 
    Scanner scan = new Scanner(System.in); 

    System.out.print("Enter first name: "); 
    firstName = scan.nextLine(); 

    System.out.print("Enter second name: "); 
    secondName = scan.nextLine(); 

    scan.close(); 
} 



public void printID(){ 

    System.out.println("Your user ID is: " + firstName); 

} 

public static void main(String[] args) { 

    UserID readNames = new UserID(); 

    UserID printID = new UserID(); 


    readNames.readNames(); 

    printID.printID(); 


} 

}

+2

Почему вы создаете два объекта одного класса? Как только вы выясните этот вопрос, вы сможете это выяснить. – 3kings

+1

В Java нет такой вещи, как глобальная переменная. – chrylis

ответ

0

Причина заключается в том, что вы вызываете метод чтения из одного экземпляра вашего класса «USERID», а затем пытается получить имя от другого. Каждый экземпляр, который вы делаете, каждый раз, когда вы делаете новый, вы создаете новый набор данных. Это может стать более ясным, если вы должны поменять 'printID.printID();' 'readNames.printID();'

Что касается исправления, попробуйте создать только один экземпляр, а затем вызовите оба метода в этом экземпляре.

0

Проблема в том, что вы создаете два объекта класса UserID. В объекте readName вы меняете переменные firstName и secondName, но в объекте printID они по-прежнему равны нулю. Это связано с тем, что нестатические переменные связаны с объектами не класса. Поэтому, когда вы печатаете переменные в объекте printID, он печатает нуль. Как и в предыдущем ответе, вы можете сменить readID с readName.

readNames.printID(); 

Или вы можете создавать переменные, связанные с классом вместо объекта, делая их статическими. Тогда для всех объектов, которые вы создаете, имя firtName и secondName будет общим.

static String firstName; 
static String secondName; 
0

Измените код, как показано ниже

readNames.readNames(); 
    readNames.printID(); 

    printID.readNames(); 
    printID.printID(); 

Ниже переменных instance variables, и они существуют в рамках объекта вы создаете его.

String firstName; 
String secondName; 

В коде, вы инициализируются переменные на readNames объекта. Таким образом, чтобы напечатать значения этих переменных, вы должны вызвать метод printID() в этом экземпляре. Вместо вызова метода printID() на экземпляр readNames вы вызывали метод на экземпляр объекта printID. Но printID экземпляр не установил переменные, и вы получили значение Null как значение по умолчанию для этого экземпляра.

Вы получите правильный результат, если используете тот же объект, в котором находитесь readNames() & printID().

И еще одно: иметь хорошие соглашения об именах и не использовать одно и то же имя для объектов и методов.

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