我基本完成了这段代码,但是当我在彩票课中打印出数组中的数字时,我得到了一堆看似乱码的东西。我该如何解决这个问题?
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 :(得分:1)
for (int a = 0; a < rand.length; a++)
{
System.out.print(k.getArray()+","); //k.getArray() which returns you an entire array
}
您正在尝试打印整个阵列。这就是为什么它可能会向您显示参考。您可以将数组存储在临时数组中并打印该数组的内容。
您可以尝试这样做:
int[] winningNum = k.getArray();
for (int a = 0; a < winningNum.length; a++)
System.out.print(winningNum[a] + ",");
答案 1 :(得分: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;
这总是返回lotteryNumbers.length-1;因为总是两个数组是相同的
答案 2 :(得分:0)
当你打印出数组时,据我所知,它调用了toString方法。 这将返回对象的哈希值,而不是它包含的值。您也可以从Arrays类调用静态方法toString来打印数组的字符串值。
System.out.print(Arrays.toString(k.getArray())+",");
或使用for循环
for (int a = 0; a < k.getArray().length; a++)
{
System.out.print(k.getArray()[a]+",");
}
答案 3 :(得分:0)
有几点需要注意:
正如其他人所提到的,如果你想打印一个数组的元素,一个简单的方法是使用for循环。除非您分别访问k的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),所以你应该解决这个问题。
最后,如果您想要彻底解决,请执行一些错误检查: