30/09/2018, 18:20

Ac cho em hỏi về cách giải quyết bài toán này được k ạ

Nguyen Ca viết 20:36 ngày 30/09/2018

Em nhớ đặt câu hỏi rõ ràng cho mong muốn của em nha: ghi tiêu để như vậy rất lười vào đọc.
Với lại đây là bài tập , em làm đã rồi hỏi. Em cho người khác thấy công sức em bỏ ra trước đã.
Yêu cầu 1 đã rõ : thuộc tính là bật và chất tạo class có 2 thuộc tính đó thôi, anh code = java em tham khảo:


public class Card {
	private String ranks =""; // 2->A
	private String suits =""; //clubs (♣), diamonds (♦), hearts (♥) and spades (♠);
	/**
	 * @return the ranks
	 */
	public String getRanks() {
		return ranks;
	}
	/**
	 * @param ranks the ranks to set
	 */
	public void setRanks(String ranks) {
		this.ranks = ranks;
	}
	/**
	 * @return the suits
	 */
	public String getSuits() {
		return suits;
	}
	/**
	 * @param suits the suits to set
	 */
	public void setSuits(String suits) {
		this.suits = suits;
	}
	
}

Yêu cầu 2 thì tạo 1 lớp bao gồm:
-1 list danh sách bộ bài có kiểu là Card đã tạo ở trên.
-1 function dùng để tạo 52 là bài
-1 funcion để tráo là bài có tham số là số lần tráo bài, code java :

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class PlayingCards {
	private static final String[] ranks = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; // 2->A
	private static final String[] suits = { "clubs", "diamonds", "hearts", "spades" };
	private List<Card> playingCards = new ArrayList<Card>();

        /**
	 * Constructor
	 */
	public PlayingCards (){
		this.createPlayingCards();
	}
	/**
	 * @return the playingCards
	 */
	public List<Card> getPlayingCards() {
		return playingCards;
	}

	/**
	 * @param playingCards
	 *            the playingCards to set
	 */
	public void setPlayingCards(List<Card> playingCards) {
		this.playingCards = playingCards;
	}

	/**
	 * @name createPlayingCards
	 * @desc Helper function to generic playingcards
	 */
	public void createPlayingCards() {
		Card card;
			for (int j = 0; j < ranks.length; j++) {
				for (int k = 0; k < suits.length; k++) {
					card = new Card();
					card.setRanks(ranks[j]);
					card.setSuits(suits[k]);
					playingCards.add(card);
				}
			}
	}
	
	/**
	 * @name shufflePlayingCards
	 * @param time
	 * 
	 */
	public void shufflePlayingCards(int time){
		for(int i =0;i<time;i++) {
			Collections.shuffle(this.getPlayingCards());
		}
	}

}

Cuối cùng là test thôi, code java:

public class Test {

	public static void main(String[] args) {

		PlayingCards plCards = new PlayingCards();
		//plCards.createPlayingCards();
		plCards.shufflePlayingCards(2);
		for (int i = 0; i < plCards.getPlayingCards().size(); i++) {
			System.out.print(plCards.getPlayingCards().get(i).getRanks());
			System.out.println(plCards.getPlayingCards().get(i).getSuits());
		}

	}

}

Giang Phạm viết 20:33 ngày 30/09/2018

các class với của anh @nguyenhuuca được liên kết với nhau như thế nào ạ, tạo các class như thế nào đó anh, em mới học java ạ

Nguyễn Thành Nam viết 20:36 ngày 30/09/2018

em chưa hiểu bài của anh lắm

Nguyen Ca viết 20:25 ngày 30/09/2018

chưa hiểu ý em lắm ? :d

Nguyen Ca viết 20:25 ngày 30/09/2018

chưa hiểu là chưa hiểu chỗ nào hi?

Giang Phạm viết 20:30 ngày 30/09/2018

ý của em là khi anh tạo 1 cái class thì anh cài đặt cho nó những gì đó anh, ví dụ như trong hình em tạo class để chạy code của anh thì em stick những phần nào ạ

Nguyễn Thành Nam viết 20:35 ngày 30/09/2018

thực ra thì bài này em đã làm cũng gần giống anh nhưng khi em hiên cái list thì nó k ra,nhà mất mạng giờ mới lên được

Nguyen Ca viết 20:29 ngày 30/09/2018

mặc định như vậy là được rồi

Nguyen Ca viết 20:26 ngày 30/09/2018

sao lại writeLn cả cái object thế, từng cái thôi. màn write ra chắc cũng không đúng.

Nguyễn Thành Nam viết 20:32 ngày 30/09/2018

từng cái thôi. màn wri

được rồi anh.nhưng trong C# không có cái hàm để đổi chỗ như java.em chưa biết làm sao

Nguyen Ca viết 20:35 ngày 30/09/2018

Có thể làm như thế này trong C# :
-Tạo một cái mảng random gồm 52 phần tử:(giá trị từ 0->51)

  • Giá trị của mảng random này là index của list bài của em .
Nguyễn Thành Nam viết 20:35 ngày 30/09/2018
    LaBai lb1 ;
    public void Taoquanbai()
    {
        for (int i = 0; i < Bac.Length; i++)
        {
            for (int j = 0; j < Chat.Length; j++)
            {
                lb1 = new LaBai();
                lb1.Bac = Bac[i];
                lb1.Chat = Chat[j];
                lb.Add(lb1);
            }
        }
    }

anh cho em hoi là sao phải đặt lb1 = new LaBai(); bên trong cái for nhỉ.em đặt ở bên trên nó không đúng

Nguyễn Thành Nam viết 20:32 ngày 30/09/2018

mà random thế nó ra cả ba mấy thì khớp cái kia kiểu gì ạ.anh có thể vi dụ cách trình bày cho e lần này được k

Nguyen Ca viết 20:23 ngày 30/09/2018

Bởi vì nó là reference type. Khi em new 1 đối tượng , sẽ có một vùng nhớ được cấp phát trên heap.
Do em đặt ngoài vòng for, Nên chỉ có 1 vùng nhớ được cấp phát, khi em thay đổi giá trị trong vòng for thì cũng chỉ nằm trên vùng nhớ đó thôi, kết quả là em sẽ được 1 list các quân bài giống nhau.
Cho nên em cần new trong vòng for đó.

Nguyễn Thành Nam viết 20:21 ngày 30/09/2018

thanks anh.mà em làm cái sáo bài kiểu này nó ra rất nhiều chất trùng nhau

public void saobai()
> {
Random rd = new Random();
for (int i = 0; i < 51; i++)
{
int A = rd.Next(2, 12);
Console.Write(A + " ");
Console.WriteLine(lb[A].Chat);
}
}

Nguyen Ca viết 20:20 ngày 30/09/2018

em phải check trùng khi random chứ

Nguyễn Thành Nam viết 20:24 ngày 30/09/2018

như thế nào ạ

Nguyen Ca viết 20:30 ngày 30/09/2018

chán trả lời rồi nha , thinking thinking … : ))ref:

stackoverflow.com
Maxim Gershkovich

Generate distinct random numbers in C#

c#, algorithm, random, code-review
asked by Maxim Gershkovich on 05:14AM - 06 Apr 11

Giang Phạm viết 20:22 ngày 30/09/2018

3 class cái nào cũng mặc định vậy hả a, em làm như vậy bị lỗi này

Nguyen Ca viết 20:23 ngày 30/09/2018

chưa save class Card kìa chú :v

Bài liên quan
0