纸牌Java程序
嘿,伙计们,我正在学习我的第一个Java类,在编译这个程序时遇到了一个错误代码。我把这两门课都上了,希望他能帮我找到错误。这是我收到的错误: 错误:类卡中的构造函数卡不能应用于给定类型; 必需:字符,字符 找到:没有参数 原因:实际参数列表和正式参数列表长度不同 它显示错误在公共无效洗牌方法下的“Card temp=new Card();”行上。任何帮助都将不胜感激纸牌Java程序,java,Java,嘿,伙计们,我正在学习我的第一个Java类,在编译这个程序时遇到了一个错误代码。我把这两门课都上了,希望他能帮我找到错误。这是我收到的错误: 错误:类卡中的构造函数卡不能应用于给定类型; 必需:字符,字符 找到:没有参数 原因:实际参数列表和正式参数列表长度不同 它显示错误在公共无效洗牌方法下的“Card temp=new Card();”行上。任何帮助都将不胜感激 import java.util.Random; import java.util.Scanner; public class
import java.util.Random;
import java.util.Scanner;
public class Deck {
private Card [] data;
public Deck()
{
String suits = "HDSC";
String ranks = "A23456789TJQK";
data = new Card[52];
int count = 0;
Card C1;
for (int s = 0; s < suits.length(); s++){
for (int r = 0; r < ranks.length(); r ++)
{
C1 = new Card(ranks.charAt(r), suits.charAt(s));
data[count++] = C1;
}
}
}
//This function display's the whole deck of cards
// Our output should be as below
// AH 2H 3H ... KH
// AS 2H 3S ... KS
// AD 2D 3D ... KD
// AC 2C 3C ... KC
public void display()
{
int index=1;
for (int i=0; i<52; i++)
{
System.out.print(data[i].rank +"" + data[i].suit + " ");
if (index%13 == 0 && i!=0 )
System.out.println();
index++;
}
}
//This function randomly shuffles the deck of cards
public void shuffle()
{
int index;
Random random = new Random();
for (int i = 0; i<52; i++)
{
index = i + random.nextInt(52 - i);
Card temp= new Card();
if (index != i)
{
temp = data[i];
data[i] = data[index];
data[index] = temp;
}
}
System.out.println("Card Shuffled");
}
public void deal()
{
int sum = 0;
int countPrime = 0;
boolean isPrime = false;
for(int i=0; i<52; i++)
{
sum += data[i].getValue(data[i]);
isPrime = checkPrime(sum);
if (isPrime == true)
{
sum = 0;
countPrime++;
if (i==51)
{
System.out.println("Winner in " + countPrime + " Piles");
break;
}
}
if (i==51)
System.out.println("Loser");
}
}
boolean checkPrime(int num)
{
boolean isPrime = true;
for(int j = 2; j <= num/2; ++j)
{
// condition for nonprime number
if(num % j == 0)
{
isPrime = false;
break;
}
}
return isPrime;
}
//Display menu
public static int menu() {
System.out.println("\nWelcome to Solitaire Prime!");
System.out.println("1) New Deck");
System.out.println("2) Display Deck");
System.out.println("3) Shuffle Deck");
System.out.println("4) Play Solitaire Prime");
System.out.println("5) Exit");
Scanner in=new Scanner(System.in);
int choice = in.nextInt();
return choice;
}
public static void main(String args[])
{
Deck newDeck = null;
int choice;
do{
//Accepts user input for menu
choice = menu();
if (choice == 1)
{
newDeck = new Deck();
System.out.println("New deck created");
}
else if (choice == 2 )
{
newDeck.display();
}
else if (choice == 3 )
{
newDeck.shuffle();
}
else if (choice == 4 )
{
newDeck.shuffle();
newDeck.deal();
}
else if (choice == 5)
{
System.out.println("Exiting game. Goodbye!");
return;
}
else
System.out.println("Wrong choice! Please try again.");
}while(choice!=5);
}
}
您的
Card
类只有一个构造函数,它接受两个char
参数;没有定义零参数构造函数
洗牌时,您不需要像现在这样创建Card
的新实例:Card temp=new Card()
不要创建Card
的新实例并将其丢弃,只需将洗牌后的Card
值分配给temp
变量,如下所示:
for (int i = 0; i<52; i++)
{
index = i + random.nextInt(52 - i);
if (index != i)
{
Card temp = data[i];
data[i] = data[index];
data[index] = temp;
}
}
for(int i=0;iCard temp=new Card()
在Card
类中没有不带参数的构造函数。你要么必须为构造函数调用提供两个char
参数,要么定义一个不带参数的构造函数。我该如何以及在哪里放置它?抱歉,这只是我的第二个程序,所以我意识到这可能是一个愚蠢的问题但是我确实知道这个构造函数看起来是什么样的public ConstructorCard(){},这很有意义,谢谢!我编译了它,但是现在我遇到了另一个问题,尽管一旦我选择了任何菜单选项,我就会在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)的Deck.main(Deck.java:282)收到这个java.lang.NullPointerException在sun.reflect.NativeMethodAccessorImpl.invoke(未知源)在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)在java.lang.reflect.Method.invoke(未知源)在edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)我的老师给我的代码在Card类下确实有suit和rank作为private char suit和private char rank,但我将其更改为public,因为我得到了一个编译器错误,这可能是原因吗?NullPointerException意味着您正在调用null
对象上的方法,即hasn未被实例化(新建)或赋值。例如,在main
方法中,处理除1以外的选项(例如选项2),您可以在newDeck
上调用display
,如果您还没有运行选项1,它将为null
。请注意,在选项1中,您如何使用newDeck=newDeck()创建Deck
。如果在选项1之前运行任何其他选项,newDeck
仍将为空,因为您尚未为其分配任何内容。明白了!最后,当我玩纸牌游戏时,它会显示赢家或输家的数量,但实际上不会打印所玩的牌。