2013-09-19 15 views
1

Вот код.Почему я получаю «[Ljava.lang.Integer; @ 72608760», когда я пытаюсь распечатать массив Integer

public class PokerGame 
{ 
    public static void main(String args[]) 
    { 
     Scanner kb=new Scanner(System.in); 
     Scanner nkb=new Scanner(System.in); 
     Random r=new Random(); 
     Double jackpot; 
     System.out.println("Enter the number of people playing"); 
     int players=nkb.nextInt(); 
     List<PokerPlayer> player; 
     PokerPlayer[] Playersstorage=new PokerPlayer[players]; 
     List<String> Names=new ArrayList<String>(); 
     List<Double> payin=new ArrayList<Double>(); 
     List<Integer> deck; 
     player=new ArrayList<PokerPlayer>(); 
     Boolean playersinit=true; 
     while(playersinit==true) 
     { 
      for(int x=0;x<players;x++) 
      { 
       System.out.println("Enter your name please, and then your pay in amount"); 
       Names.add(kb.nextLine().toLowerCase()); 
       payin.add(nkb.nextDouble()); 
      } 
      System.out.print("\f"); 
      playersinit=false; 
     } 
     Boolean playing=true; 
     while(playing==true) 
     { 
      deck=new ArrayList<Integer>(52); 
      final int decksize=52; 
      Boolean deckshuffled=true; 
      while(deckshuffled==true) 
      { 
       while(deck.size()<decksize) 
       { 
        Boolean selectRandom=true; 
        Integer currentRandom=0; 
        while(selectRandom==true) 
        { 
         Boolean comparecard=true; 
         currentRandom=r.nextInt(52)+1; 
         while(comparecard==true) 
         { 
          if(deck.contains(currentRandom)) 
          { 
           comparecard=false; 
          } 
          else 
          { 
           selectRandom=false; 
           comparecard=false; 
          } 
         } 
        } 
        deck.add(currentRandom); 
        if(deck.size()==decksize) 
        { 
         deckshuffled=false; 
        } 
       } 
      } 
      boolean card_distributor=true; 
      while(card_distributor==true) 
      { 
       boolean playerstarter=true; 
       Integer o=deck.size()-1; 
       Integer pinit=0; 
       Integer ps=1; 
       while(playerstarter==true) 
       { 
        int[] mycards= new int[2]; 
        mycards[0]=deck.get(o); 
        deck.remove(deck.size()-1); 
        int newdecksize=deck.size(); 
        Playersstorage[pinit]=new PokerPlayer(Names.get(pinit),payin.get(pinit),mycards); 
        player.add(Playersstorage[pinit]); 
        pinit++; 
        o=deck.size()-1; 
        if(ps==players) 
        { 
         playerstarter=false; 
         playing=false; 
         card_distributor=false; 
        } 
        ps++; 
       } 
      } 
      Boolean playingCards=true; 
      List<Integer> dealerHand=new ArrayList<Integer>(); 
      Integer dealing=deck.size()-1; 
      jackpot=0.00; 
      while(playingCards==true) 
      { 
       /*for(int x=0;x<3;x++) 
       { 
        dealerHand.add(deck.get(dealing)); 
        deck.remove(dealing); 
        dealing=deck.size()-1; 
       }*/ 
       try 
       { 
        Thread.sleep(1000/1); 
       } 
       catch(InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       System.out.println("What is your name?"); 
       String name=kb.nextLine().toLowerCase(); 
       boolean betting=true; 
       while(betting==true) 
       { 
        System.out.println("Enter your bet"); 
        Integer bet=nkb.nextInt(); 
        int indexofbet=Names.indexOf(name); 
        if(bet>player.get(indexofbet).getMoney()) 
        { 
         System.out.println("You can not bet that much without selling your first born childs soul, would you like to do this?"); 
         String sellchild=kb.nextLine(); 
         if(sellchild.equalsIgnoreCase("yes")) 
         { 
          jackpot+=bet; 
          betting=false; 
         } 
         else 
         { 
          betting=true; 
         } 
        } 
        else 
        { 
         jackpot+=bet; 
         betting=false; 
        } 
       } 
       System.out.println(jackpot); 
       try 
       { 
        Thread.sleep(1000/1); 
       } 
       catch(InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       System.out.println("\f"); 
       if(Names.contains(name)) 
       { 
        Integer index=Names.indexOf(name); 
        System.out.println(player.get(index).getCards()); 
        Boolean notfinished=true; 
        while(notfinished==true) 
        { 
         try 
         { 
          Thread.sleep(1000/1); 
         } 
         catch(InterruptedException e) 
         { 
          e.printStackTrace(); 
         } 
         System.out.println("Are you finished looking at your cards "+name+"?"); 
         String done=kb.nextLine(); 
         if(done.equalsIgnoreCase("Yes")) 
         { 
          System.out.println("\f"); 
          notfinished=false; 
         } 
        } 
       } 
      } 
      List<Integer> gameEnd=new ArrayList<Integer>(); 
      List<Integer> comparison=new ArrayList<Integer>(); 
      Boolean checkplayersscore=true; 
      while(checkplayersscore==true) 
      { 
       for(Integer x=0;x<players;x++) 
       { 
        if(player.get(x).getMoney()==0.00) 
        { 
         System.out.println(player.get(x).getMoney()+player.get(x).getName()); 
         gameEnd.add(1); 
        } 
        else 
        { 
         System.out.println(player.get(x).getMoney()+player.get(x).getName()); 
         gameEnd.add(2); 
        } 
        comparison.add(2); 
       } 
       Boolean continuecheck=true; 
       int checkover=1; 
       while(continuecheck==true) 
       { 
        if(gameEnd.contains(1)) 
        { 
         Integer remove=gameEnd.indexOf(1); 
         gameEnd.remove(remove); 
         comparison.remove(remove); 
         Names.remove(remove); 
         payin.remove(remove); 
         player.remove(remove); 
         Playersstorage[remove]=null; 
        } 
        if(gameEnd.containsAll(comparison)) 
        { 
         continuecheck=false; 
         checkplayersscore=false; 
         playing=false; 
        } 
        if(checkover==players) 
        { 
         continuecheck=false; 
         checkplayersscore=false; 
        } 
        if(player.size()==0) 
        { 
         continuecheck=false; 
         checkplayersscore=false; 
         playing=false; 
        } 
        checkover++; 
       } 
      } 
     } 
    } 
} 

public class PokerPlayer 
{ 
    private String name; 
    private Double money; 
    private Integer[] cards; 
    public PokerPlayer(String na,Double n,int[] card) 
    { 
     name = na; 
     money=n+0.00; 
     cards=new Integer[card.length]; 
     cards[0]=card[0]; 
     cards[1]=null; 
    } 
    public Integer BJScore(List<Integer> mycards) 
    { 
     /*unfinished code*/ 
    } 
    public Integer[] getCards() 
    { 
     return cards; 
    } 
    public void setCards(int card) 
    { 
     for(int x=0;x<cards.length;x++) 
     if(cards[x]==null) 
     cards[1]=card; 
    } 
    public void setMoney(Double d) 
    { 
     money-=(d+0.00); 
    } 
    public Double getMoney() 
    { 
     return money; 
    } 
    public String getName() 
    { 
     return name; 
    } 
} 

Я пытаюсь создать блэкджек для моего AP класса Java, когда я иду, чтобы получить и распечатать карты, которые вы были даны, который в настоящее время только одна карта хранится в 0 индекса из массив и нуль во втором индексе (задано в классе конструктора), он отправляет мне [Ljava.lang.Integer; @ 72608760 или другое изменение числа (я предполагаю, что он изменяется из-за изменения карточек каждый раз, когда он называется). Кто-нибудь знает причину, по которой он печатает это вместо фактических значений, которые были сохранены в массиве Integer?

+0

Возможный дубликат [Почему println (массив) имеет странный выход? ("\ [Ljava.lang.String; @ 3e25a5")] (http://stackoverflow.com/questions/8410294/why-does-printlnarray-have-strange-output-ljava-lang-string3e25a5). См. Также: [Самый простой способ печати массива в Java] (http://stackoverflow.com/questions/409784/simplest-way-to-print-an-array-in-java) –

+1

Это дублированный вопрос, но также см. [Простейший способ печати массива в Java] (http://stackoverflow.com/q/409784/1281433). –

+0

Так как массив Integer печатает. –

ответ

6

Это потому, что объекты массива не имеют значимого метода toString(), они просто используют значение по умолчанию toString() в Object, которое печатает имя класса и адрес памяти. Лучше использовать эту функцию для печати массивов:

System.out.println(Arrays.toString(array)); 

Вот link к документации, и не забудьте импортировать Arrays класс, то в пакете java.util.

2

Массивы также являются объектами Java, но они не переопределяют Object метод toString(). Результат, который вы видите, составляет от Object's toString() метода. Цитируя Object «S Javadocs:

Метод ToString для класса Object возвращает строку, состоящую из имя класса из которого объект является экземпляром, на-знак символ` @», и беззнаковое шестнадцатеричное представление хеша код объекта. Другими словами, этот метод возвращает строку, равную к значению:.

GetClass() GetName() + '@' + Integer.toHexString (хэш-код())

getClass().getName() часть является ответственный за часть [Ljava.lang.Integer, а hashCode, который для объектов обычно основан на адресе памяти, отвечает за изменение численного изменения в конце.

Чтобы получить желаемый результат, вы можете использовать Arrays.toString(), проходящий в вашем массиве.

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