Imprimir todas as cartas de um baralho

Olá.

Estou tentando criar um programa que imprima todas as 52 cartas do baralho, do 1 até o 10 e com todos os naipes (Paus, Ouros, Copas, Espadas) e também imprimir as cartas Valete, Dama e rei.

Achei o uso do “for” mais apropriado nesse caso, porém não tenho muito conhecimento com funções de repetições, gostaria de saber como imprimir uma “String” utilizando o “for”?

Estou utilizando essa lógica mas ela não é muito prática, pois está imprimindo só até o número 4, poderiam me ajudar a imprimir o restante dos números? E adicionar o “valete, dama e rei” ?

public class Baralho {
public static void main(String[] args) {

	int numeroCartas[] = {1,2,3,4,5,6,7,8,9,10};
	
	String naipesCartas[] = {"Copas","Ouros","Espadas","Paus"};
	
	int i;
		for(i=0; i<4; i++) {
			System.out.printf("%d de %s.\n", numeroCartas[i], naipesCartas[i] );
		}

	}
}

Opa, Cesar! Tranquilo?

Então, ele tá imprimindo até o 4 por que você fez ele imprimir até o quatro na condição do For. O for funciona assim:

para ( variavel =0; enquanto a variavel não atingir essa condição; ação)

Ou seja:

para (i começando em 0; enquanto i for menor que 4; i acresce um)

Seu laço tá imprimindo da seguinte forma:

1 de Copas.
2 de Ouros.
3 de Espadas.
4 de Paus.

Isso por que ele tá executando, nesse for, isso aqui:

numeroCartas[0] e naipesCartas[0]
numeroCartas[1] e naipesCartas[1]
numeroCartas[2] e naipesCartas[2]
numeroCartas[3] e naipesCartas[3]

O que você precisa executar é

    numeroCartas[0] e naipesCartas[0]
    numeroCartas[0] e naipesCartas[1]
    numeroCartas[0] e naipesCartas[2]
    numeroCartas[0] e naipesCartas[3]
    numeroCartas[1] e naipesCartas[0]
    numeroCartas[1] e naipesCartas[1]
    numeroCartas[1] e naipesCartas[2]
    numeroCartas[1] e naipesCartas[3] [...]

Conseguiu visualizar melhor?

Dica: Você vai precisar de um for dentro do outro!

Ah, não esquece que os vetores no Java são zero-based, ou seja, eles não começam na posição 1!

Eita rs Agora complicou, mas vou tentar aqui, já não sei usar muito bem o for , imagine usar um dentro do outro, mas obrigado pela dica !

Certo, a dica final que posso te dar é:

Use a variável i para um for, e uma outra variável (com nome que vc quiser, eu geralmente uso j) para outro for.

1 curtida

Consegui !!! Obrigado pela dica, foi essencial !

Por nada :slight_smile:

[]'s

Não tem mistério:

int[] numeroCartas = { 1,2,3,4,5,6,7,8,9,10 };
String[] naipesCartas = { "Copas","Ouros","Espadas","Paus" };

for (String naipe : naipesCartas) {
    for (int numero : numeroCartas) {
        System.out.printf("%d de %s.%n", numero, naipe);
    }
}

Dessa maneira ele imprime de 1 à 10 em um naipe, depois de 1 à 10 em outro naipe.
O objetivo seria:

1 de Copas
1 de Ouros
1 de Espadas
1 de Paus
2 de Copas

Quais alterações eu teria que fazer nesse código para conseguir executar dessa maneira ? e qual a função do “:” no for ?

Cesar, o for com : é conhecido como foreach. Isso é, “for para cada elemento em x”. É um conceito que deve ser estudado.

por acaso o for each foi introduzido no Java 1.5, junto de Generics e outras belezinhas. tem quase uma década.

Doideira. As faculdades de hoje ensinam foreach?

Doideira

1 curtida

É só trocar a ordem dos laços. :neutral_face:

for (int numero : numeroCartas) {
    for (String naipe : naipesCartas) {
        System.out.printf("%d de %s.%n", numero, naipe);
    }
}

Como diria o Tank: Neo, this is loco.
(Matrix - 1996)

Então, se você pegar um professor que não parou no tempo, provavelmente ele vai ensinar esse recurso do Java que já existe há 14 anos. :smiley:

Quando fiz Ciência da Computação, tive uma disciplina chamada “Linguagens para Programação de Sistemas”, onde aprendíamos algumas características e recursos de diferentes linguagens.
Frequentemente o professor lançava uns desafios, como por exemplo, implementar um algoritmo utilizando tipos genéricos de dados, aí o aluno que decidia a linguagem em que iria fazer. Lembro de ter feito em Java e em C++ para ilustrar as diferenças na sintaxe.

Fora isso, nas disciplinas de “Introdução à Programação” e “algoritmos”, nunca fora utilizado um foreach ou um tipo genérico.

Eu tive Pascal e Fortran 77 na faculdade.
Precisei aprender C com uma apostila on-line.

Assim: se o cara quer ensinar programação estruturada, ou OO, tem muitas opções disponíveis mas os professores precisam se atualizar

1 curtida