2013-10-11 6 views
3

У меня есть следующий код, и мне интересно, почему null возвращается, когда я запускаю программу, а не фактическое значение? Любая помощь будет рассмотрена.Почему null возвращается вместо значения?

import java.util.Random; 


public class TestCard { 

    public static String[] possCards = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; 
    public static String[] possSuits = new String[]{"C", "S", "H", "D"}; 
    public static Random rand = new Random(); 
    static String value; 

    public static void main(String[] args) { 
      System.out.println(getcard()); 
    } 


    public static void card() { 
     String card = possCards[rand.nextInt(possCards.length)]; 
     String suit = possSuits[rand.nextInt(possSuits.length)]; 

     value = card + suit; 
    } 
    public static String getcard(){ 
     return value; 
    } 


} 
+4

Вы никогда не называют 'карты() '.. –

+0

Значение по умолчанию String равно Null. Вы никогда не вводите значение String – newuser

+1

. Я думаю, что первым шагом отладки является научиться добавлять System.out.println в каждом методе для отслеживания метода методом block by block – Jianhong

ответ

5

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

Почему это должно быть иначе, если вы не вызываете какие-либо методы, которые дают значение ссылку, например card(), перед вызовом getCard()?

Ключевое значение здесь - попытаться пройти через свой код умственно шаг за шагом, чтобы увидеть, что он делает. Либо это, либо выполните свой код с помощью отладчика.

1

Вы звоните getcard(), но не звоните card(), поэтому value никогда не устанавливается.

0

Вы должны вызвать card() функцию:

public static void main(String[] args) { 
     card(); 
     System.out.println(getcard()); 
} 
1

Проверьте следующие части кода:

public static void main(String[] args) { 
     System.out.println(getcard()); // printing getCard(), 
             //but card() isn't called before it!! 
} 


public static void card() { 
    String card = possCards[rand.nextInt(possCards.length)]; 
    String suit = possSuits[rand.nextInt(possSuits.length)]; 

    value = card + suit; // assigning value in card() 
         //but this function needs to get executed 
} 
0

Перед вызовом getcard() необходимо вызвать карту() для подготовки ваших расчетов ,

Ваш код должен выглядеть ниже.

public static void main(String[] args) { 
     card(); 
     System.out.println(getcard()); 
} 
0

вы также можете иметь статический блок кода в вашем TestCard, который инициализирует value для вас:

static{ 
    card(); 
} 

так что вы знаете значение, чтобы быть не NULL

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