2014-11-13 3 views
0

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

import java.util.Scanner; 
public class Hw5pr2 
{ 
    public static void main(String[] args) 
    { 
    Scanner kb = new Scanner(System.in); 
    int[] rand = new int[5]; 
    System.out.println("please enter 5 number"); 
    for (int a = 0; a<rand.length; a++) 
    { 
    rand[a] = kb.nextInt(); 
    } 
    Lottery k = new Lottery(); 
    System.out.print("your number are: "); 
    for (int a = 0; a < rand.length; a++) 
    { 
     System.out.print(rand[a]+","); 
    } 
    System.out.print("The Winning numbers are: "); 
    for (int a = 0; a < rand.length; a++) 
    { 
     System.out.print(k.getArray()+","); 
    } 
    System.out.println("you have " + k.RanInput(rand) + " matching number!!"); 
    } 
} 



import java.util.Random; 
public class Lottery 
{ 
private int[] lotteryNumbers = new int[5]; 
    public Lottery() 
    { 
    Random rand = new Random(); 
    for (int a = 0; a<lotteryNumbers.length; a++) 
     { 
     lotteryNumbers[a] = rand.nextInt(9)+1; 
     } 
    } 
    public int RanInput(int[] Inran) 
    { 
    int b = 0; 
    for (int a = 0; a<lotteryNumbers.length; a++) 
     { 
     if (lotteryNumbers[a] == Inran[a]) 
      { 
      b++; 
      } 
     } 
    return b; 
    } 
    public int[] getArray() 
    { 
    return lotteryNumbers; 
    } 
} 
+0

, когда вы говорите, что «получите кучу тарабарщин», не стесняйтесь показать нам, что выход. Кроме того, этот код может работать с некоторым удобным для человека отступом, поскольку вы просите других людей посмотреть на него. Помогите этим людям. –

+0

Как указано пользователем 3437460, я предполагаю, что «тарабарщина» - это адрес памяти 'k.getArray()' в строке 'System.out.print (k.getArray() +", ");'. Не все объекты умеют печатать себя красиво: S ... все еще, показывая нам, что «тарабарщина» спасет нас от угадывания. –

ответ

1
for (int a = 0; a < rand.length; a++) 
{ 
    System.out.print(k.getArray()+","); //k.getArray() which returns you an entire array 
} 

Вы пытаетесь напечатать весь массив. Вот почему это может показать вам ссылку. Вы можете сохранить массив в массиве temp и распечатать содержимое этого массива.


Вы можете попробовать сделать что-то вроде этого:

int[] winningNum = k.getArray(); 
for (int a = 0; a < winningNum.length; a++) 
    System.out.print(winningNum[a] + ","); 
0

попробовать что-то вроде

System.out.print("The Winning numbers are: "); for (int a = 0; a < rand.length; a++) { System.out.print(k.getArray()[a]+","); }

примечание здесь

for (int a = 0; a<lotteryNumbers.length; a++) 
{ 
    if (lotteryNumbers[a] == Inran[a]) 
    { 
     b++; 
    } 
} 
return b; 

это всегда возвращают л otteryNumbers.length-1; beacause всегда два массива одинаковы

0

Когда вы печатаете массив, насколько мне известно, он вызывает метод toString. Возвращает хэш объекта, а не значения, которые он содержит. Вы можете вызвать статический метод toString из класса Arrays также для печати строковых значений массива.

 System.out.print(Arrays.toString(k.getArray())+","); 

или использовать цикл

for (int a = 0; a < k.getArray().length; a++) 
    { 
     System.out.print(k.getArray()[a]+","); 
    } 
0

несколько вещей, чтобы отметить:

Как уже упоминалось выше, если вы хотите напечатать элементы массива, простой способ сделать это с циклом for. Ваш код не будет работать так, как вы хотите его, если вы не получить доступ к каждому элементу массива lotteryNumbers Д.К. отдельно:

System.out.print("The winning numbers are: "); 
for (int a = 0; a < rand.length; a++) 
    { 
     System.out.print(k.getArray()[a]); //make sure to include the [a] 
     if(a != rand.length - 1) //added to help make prints more readable 
      System.out.print(", "); 
    } 

Во-вторых, ваша функция RanInput не будет вести себя так, как вы хотите, чтобы он, предполагая, что вы хотели посмотрите, сколько номеров пользователей соответствуют номерам лотереи. В настоящее время он просто проверяет, соответствует ли n-й номер числу n-го лото, что вряд ли будет истинным. Вместо этого, вы должны сделать что-то вроде этого:

public int RanInput(int[] Inran) 
{ 
    int count = 0; 
    for (int i = 0; i<lotteryNumbers.length; i++) 
    { 
     for(int j = 0; j < lotteryNumbers.length; j++) { 
      if (lotteryNumbers[j] == Inran[i]) 
       { 
       count++; 
       } 
     } 
    } 
    return count; 
} 

Он сравнивает каждый из введенных чисел с каждым из чисел лото. Есть более эффективные способы сделать это, чем приведенный выше код, но я думаю, что на данный момент это должно быть достаточно хорошо.

Я не думаю, что код, который вы используете для генерации номеров лотереи, учитывает дубликаты (например, цифры могут быть 1, 2, 2, 1, 3), поэтому вы должны это исправить.

Наконец, вот некоторые проверки ошибок, вы должны осуществить, если вы хотите, чтобы быть полным:

  • убедитесь, что пользователь вводит ровно 5 номеров
  • все целые положительные числа
  • ниже некоторый верхний предел (скажем, , 100)
+0

Я реализовал то, что вы сказали и предложил, но теперь у меня возникают проблемы с его распознаванием самого последнего числа в случайном массиве лотереи. Какие-либо предложения? – kerus

+0

Какая ошибка вы получаете? Я сделал редактирование кода, который я написал выше, во втором цикле для него должен быть «int j = 0» вместо «int j = i». –

+0

Не было ошибок, это было что-то, что я заметил, но это, казалось, исправить. Благодарю. – kerus

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