2015-01-17 5 views
0

У меня возникла проблема с исключением Java Nullpointer. Поэтому в основном я делаю код, который будет запрашивать у пользователя ввод данных X, а затем в соответствии с типом данных, который он напечатал, он добавит их в качестве соответствующего типа переменной, сравнивая его с другими предыдущими существующими переменными.Ошибка при попытке сравнить экземпляр класса с переменным типом

varvar A; 
    varvar B; 
    varvar C; 
    System.out.println("Choose what to do:"); 
    System.out.println("1. Set variable A"); 
    System.out.println("2. Set variable B"); 
    System.out.println("3. Set variable C"); 
    b = src.nextInt(); //next int into variable b 

if(b==1){ 

    while (src.hasNext()) { //Next thing the user is going to input 

      if (src.hasNextInt()) { // If it's an integer, do this : 

       if("Integer".equalsIgnoreCase(B.getClass().getSimpleName())){B = null;}; 
       if("Integer".equalsIgnoreCase(C.getClass().getSimpleName())){C = null;}; 

Эти последние 2 строки в основном являются тем, с чем я борюсь. B и C являются экземплярами класса varvar. Я пытаюсь удалить B и C, если их существующее содержимое является переменной Integer. Но всякий раз, когда я добавляю эти две строки, я получаю исключение Nullpointer. Вот более ранний код класса varvar:

   public static class varvar { 
    int x; 
    boolean y; 
    double z; 

    public varvar (int x){ 
     this.x = x; 
    } 

    public varvar (boolean y){ 
     this.y = y; 
    } 

    public varvar (double z){ 
     this.z = z; 
    } 

Может ли кто-нибудь мне помочь? Я пытаюсь найти способ сравнить типы переменных B и C с Integer и удалить их, если они действительно содержат переменные типа Integer.

+0

Кажется 'B.getClass()' is 'null'. поставить точку отладки и проверить. – iMBMT

+0

@bmthaker B уже имеет значение null при инициализации, но оператор if должен запускаться только в том случае, если B является целым числом, поэтому он может обнулить его значение. – Zee

+0

Я не понимаю, чего вы пытаетесь достичь? что такое 'varvar'? Положите условие как 'if (B! = Null &&" Integer ".equalsIgnoreCase (B.getClass(). GetSimpleName()))' для обработки нулевого указателя. он не выполнит условие, если 'B' имеет значение null и не вызывает никакой * ошибки *. – iMBMT

ответ

0
  1. Java - это чувствительный к регистру язык. B и b - это не одно и то же. В вашем примере B никогда не устанавливается, поэтому оно равно null.

  2. Java имеет отражение, поэтому вся гимнастика со Струнами замусоривает код. Вместо этого, попробуйте следующее:

    если (Integer.isInstance (B)) {B = NULL;}

Когда вы смотрите на это, и вы знаете заранее (как автор кода) что B является экземпляром varvar, вы можете видеть, что код является бессмысленным, потому что объект типа varvar никогда не может быть типа Integer.

Я не уверен, что вы пытаетесь сделать здесь, поэтому я не могу дать вам гораздо больше информации, чем это.

+0

класс varvar - это то, что я сделал, чтобы иметь возможность создавать 3 разных экземпляра, которые могут содержать переменные типа booleans, integer и double type. Независимо от того, что я решил ввести в экземпляр varvar, он добавит его как соответствующий тип, есть ли способ, чтобы я мог проверить тип переменной, содержащейся в экземпляре, пожалуйста? – Zee

+0

Является ли каждый экземпляр варвара одним результатом или тремя результатами? –

+0

Только один. Имеет ли он три результата? Вот почему мой код не будет работать? – Zee

0

Нужно инициализировать varvar A, B и C, чтобы содержать экземпляр вашего класса.

В любом случае, если вы хотите иметь объект класса, связанный с типом, используйте

varvar.class.getSimpleName() 

Класс, связанный с переменными А, В и С Варвар или подкласс их.

Кроме того, неясно, что вы подразумеваете под их «удалением». Кажется, вы указали переменную в null.

Подсказка для лучшей удобочитаемости: имена классов должны начинаться с символа верхнего регистра и переменных с строчным символом.

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