Générez automatiquement des plans d'achat Loto 6 avec Java que les super débutants ont appris

introduction

Ami (expérimenté en programmation) "Avez-vous commencé à programmer?"

Je "ouais"

Ami "Alors, faisons une programmation qui décide du nombre de Loto6"

Je peux me le permettre : wink: "

Au début

Lotto 6 est une loterie de type sélection de numéro où vous pouvez choisir 6 numéros différents de 1 à 43.

Comme le titre l'indique, je suis un débutant en programmation, alors écrivons du code qui facilite la sélection des 6 numéros de loterie en Java! C'est un article de. Bien sûr, je ne passe pas au-delà des numéros gagnants. ~~ Qu'est-ce que le grattage? ~~

Cela ressemble à une lutte, alors j'espère que vous vous souviendrez quand vous étiez un débutant et que vous le voyez avec des yeux chaleureux.

Proposition 1 (Gori push)

J'écrirai le code immédiatement.

I "Eh bien, commencez par créer un tableau pour stocker 6 numéros ..." J'ai dit: "Bien sûr, la classe Random est indispensable parce que les nombres de 1 à 43 sont choisis au hasard."


int[] numbers = new int[6];
for (int i = 0; i < numbers.length; i++) {
	Random random = new Random();
	numbers[i] = random.nextInt(43)+1;
}

J'ai dit: "Oh, est-ce terminé? La programmation est facile : lunettes de soleil:"

J'exécute

result



39
18
7
18
34
11

Je "Ah ... c'est vrai ... : sanglot:"

Évidemment, cela couvrira les chiffres. Comme mentionné ci-dessus, le Lotto 6 a 6 numéros différents, donc on ne peut pas dire qu'il est terminé.

J'ai dit: "Alors, si vous souffrez, vous devez le resélectionner. Que dois-je faire?"

Je "pousse ou : muscle:"


do {
	for (int i = 0; i < numbers.length; i++) {
		Random random = new Random();
		numbers[i] = random.nextInt(43)+1;
	}
} while (numbers[0] == numbers[1] || numbers[0] == numbers[2] || numbers[0] == numbers[3] ||
		 numbers[0] == numbers[4] || numbers[0] == numbers[5] || numbers[1] == numbers[2] ||
		 numbers[1] == numbers[3] || numbers[1] == numbers[4] || numbers[1] == numbers[5] ||
		 numbers[2] == numbers[3] || numbers[2] == numbers[4] || numbers[2] == numbers[5] ||
		 numbers[3] == numbers[4] || numbers[3] == numbers[5] || numbers[4] == numbers[5]);

Achevée. J'ai eu ce que je cherchais. Les chiffres ne sont jamais couverts.

Je "Regardez-le ~ J'ai pu ~ : détendu:"

Ami "Oh, c'était rapide. Lequel ...?"

ami "······"

Ami "vous ..."

J'ai dit: "Eh bien, ai-je encore fait quelque chose? : Triph:"

Ami "Ba! Ka! Ya! Ro! U!"

Ami "Qu'est-ce que la programmation! Vous n'avez pas besoin de bouger! ~~ (prédication) ~~"

I ": dizzy_face: : dizzy_face: : dizzy_face:"

Proposition 2 (méthode / généralisation)

La proposition 1 est devenue une merde.

Je "Je ne sais pas ce que c'est, mais je me suis fâché"

J'ai dit: "Mais c'était un problème lors de l'écriture, et cela ne ressemble pas à la programmation que j'envisage."

J'ai dit: «Tout d'abord, trions le flux. Ce que je veux faire, c'est vérifier si les nombres du tableau sont couverts comme je l'ai écrit plus tôt. Si oui, changez l'un des nombres. Et vérifiez à nouveau depuis le début. "

J'ai dit: "Eh bien, devrais-je faire une méthode pour vérifier si les 0ème à 4ème nombres du tableau se chevauchent avec d'autres nombres!?"

I "Créer une méthode pour obtenir un nombre aléatoire pour le moment et le mettre dans un tableau ..."

int[] numbers = new int[6];
	for (int i = 0; i < numbers.length; i++) {
		numbers[i] = getNumbers();
        }

private static int getNumber() {
	Random random = new Random();
	return random.nextInt(43)+1;
}

I "Faisons une méthode de vérification"



private static void checkNumber0(int numbers[]) {
	for(int i = 1;i < numbers.length;i++) {
		if(numbers[0] == numbers[i]) {
			numbers[i] = getNumber();
			checkNumber0(numbers);
		}
	}
	checkNumber1(numbers);
}

private static void checkNumber1(int numbers[]) {
	for(int i = 2;i < numbers.length;i++) {
		if(numbers[1] == numbers[i]) {
			numbers[i] = getNumber();
			checkNumber0(numbers);
		}
	}
	checkNumber2(numbers);
}

private static void checkNumber2(int numbers[]) {
	for(int i = 3;i < numbers.length;i++) {
		if(numbers[2] == numbers[i]) {
			numbers[i] = getNumber();
			checkNumber0(numbers);
		}
	}
	checkNumber3(numbers);
}

private static void checkNumber3(int numbers[]) {
	for(int i = 4;i < numbers.length;i++) {
		if(numbers[3] == numbers[i]) {
			numbers[i] = getNumber();
			checkNumber0(numbers);
		}
	}
	checkNumber4(numbers);
}

private static void checkNumber4(int numbers[]) {
	for(int i = 5;i < numbers.length;i++) {
		if(numbers[4] == numbers[i]) {
			numbers[i] = getNumber();
			checkNumber0(numbers);
		}
	}
}

J'ai "fini!"

J'ai dit: "Mais ce n'est pas plus long qu'avant ...? Si je montre cela, je me mettrai à nouveau en colère ..."

J'ai dit: "Le contenu de checkNumber 〇 () est une programmation similaire, donc je me demande s'ils peuvent être combinés en un seul."

Pensez calmement ici. Il y a de nombreux points communs entre les différentes méthodes. Il semble que des éléments communs puissent être extraits même si les nombres sont différents.

Je "Je pense que je devrais programmer ça!"



private static void checkNumbers(int index, int[] numbers) {
	for (int i = index + 1; i < numbers.length; i++) {
		if (numbers[index] == numbers[i]) {
			numbers[i] = getNumbers();
			checkNumbers(0, numbers);
		}
	}
	index++;
	if (index < numbers.length - 1) {
		checkNumbers(index, numbers);
	}
}

Achevée. C'est beaucoup plus propre qu'avant. Le son de niveau supérieur de Drakue est reproduit dans le cerveau.

J'ai dit: "Tout est fait, montrons-le à un ami ~ : sourire narquois:"

・ ・ ・

Ami "Hmm. La quantité de code elle-même n'a peut-être pas beaucoup changé, mais maintenant elle est assez polyvalente. Cela facilitera les choses même s'il y a des changements dans les spécifications."

J'ai "passé ça!? : Satisfait:"

Mon ami a dit: "Eh bien, pour un débutant, il y a un slogan, mais même si vous passez, c'est un point."

J'ai dit: "Eh bien, j'ai fait de mon mieux même avec ça. Ou puis-je l'écrire plus facilement?"

Ami "Oh, je vais l'appeler de manière plus concise que ça. S'il te plaît, fais de ton mieux pour y réfléchir."

I ": dizzy_face: : dizzy_face: : dizzy_face:"

Proposition 3 (version complétée)

Le plan 2 n'est pas passé inaperçu, mais mon ami ne m'a donné qu'un bon score. Je veux faire un programme surprenant pour mes amis quand je serai ici.

Je "que dois-je faire?"

Si vous organisez le flux ici

  1. Déclarez un tableau
  2. Attribuez un nombre aléatoire au contenu du tableau
  3. Vérifiez si le contenu de la matrice chevauche d’autres contenus
  4. Si couvert, réécrivez le contenu de l'un des tableaux
  5. Répéter [3,4]

J'ai dit: "Hmm. C'est peut-être un peu inutile."

J'ai dit: "Est-il possible de le rendre plus concis en vérifiant s'il est couvert par les nombres qui ont été mis lors de l'attribution de variables au tableau dans [2]?"



for(int i = 0;i < numbers.length;i++) {
    numbers[i] = getNumber();
    for(int j = 0 ; j < i ;j++) {
        if(numbers[j] == numbers[i]) {
        	numbers[i] = getNumber();
        }
    }
}

Ce n'est pas terminé ... Naturellement la deuxième fois


numbers[i]=getNumber();

Et il est possible que les chiffres soient à nouveau couverts.

J'ai dit: "Hmm. Il semble que je devrais en faire une méthode comme le Plan 2 et recommencer si si (vrai) ..."

J'ai dit "A partir de zéro ...? : Flushed:! Non, j'ai juste besoin de le réduire!


for(int i = 0;i < numbers.length;i++) {
	numbers[i] = getNumber();
	for(int j = 0 ; j < i ;j++) {
		if(numbers[j] == numbers[i]) {
			i--;
			break;
		}
	}
}

Je "Décrémente ...! Au fait, il y avait quelque chose comme ça."

J'ai dit: "De toute façon, je peux dire que c'est l'achèvement final. J'ai pu écrire du beau code sans gaspillage! : Blush:"

Loto6


public class Loto6{
	public static void main(String[] args) {
		int[] numbers = new int[6];
		for(int i = 0;i < numbers.length;i++) {
			numbers[i] = getNumber();
			for(int j = 0 ; j < i ;j++) {
				if(numbers[j] == numbers[i]) {
					i--;
					break;
				}
			}
		}
		for (int i : numbers) {
			System.out.println(i);
		}
	}

	private static int getNumber() {
		Random random = new Random();
		return random.nextInt(43)+1;
	}
}

Ami "Oh! Je pourrais écrire un assez bon code"

Je "Ehehe : kissing_closed_eyes:"

Ami "Comment est-ce? La joie de ce genre de processus de réflexion ou lorsque le code que vous pensiez de vous-même fonctionnait correctement serait énorme."

J'ai dit: "Ouais! J'ai pu penser que la programmation était amusante."

Ami "C'était bien. Continuez à faire de votre mieux."

J'ai dit: "Bien sûr. Au fait, quel genre de programme écrirais-tu si tu étais un ami?"

Ami "C'est moi? C'est bon pour moi ..."

Loto6


public class Loto {
	public static void main(String[] args) {
		List<Integer> numbers = new ArrayList<Integer>();
		for(int i = 1;i <= 43;i++) {
			numbers.add(i);
		}
		
		Collections.shuffle(numbers);
		
		for(int i = 0;i < 6;i++) {
			System.out.println(numbers.get(i));
		}
	}
}

Ami "Eh bien, je me demande si je peux utiliser la classe List et la classe Collections pour le sortir."

** Je "Ahokusa" **

Conclusion

Programmation amusante!

Recommended Posts

Générez automatiquement des plans d'achat Loto 6 avec Java que les super débutants ont appris
Les gens s'inquiètent, les gens créent des modèles Builder - Des outils qui génèrent automatiquement des modèles Java Builder -
Est-il possible de générer automatiquement Getter / Setter avec l'interface Java?