我在java编程方面有一些问题。这是我第一次遇到java,所以请耐心等待,因为我可能会错过绝对的基础知识。无论如何,长话短说,我有数独要做,我遇到了一些问题。我需要随机数来制作数独板,或者更确切地说是它的值。
如果您不知道数独是关于什么的,则必须只有1-9的数字,并且它们不能在行列和3x3正方形中重复。板本身是9x9,因此可以分为9个3x3正方形。
主要问题是随机生成的值有时会使模式难以解决。因此,我试图重复随机绘制那些不可能解决的线以避免这些情况,但由于我过期了,我做不到。这是代码,谢谢帮助;)
import java.util.Random;
public class tabela {
public static void main(String[] args) {
boolean bylo[] = new boolean[10];//this array tells me if the number is avalible to pick
boolean wysw[][] = new boolean[9][9];//not used yet it is ment to be used while displaying array in GUI
int tabela[][] = new int[9][9];//here will be generated values of sudoku
for(int i=0; i<9;i++)
for(int j=0;j<9;j++)
tabela[i][j]=0; //filling array with 0s
for (int i = 0; i < 9; i++) {
// System.out.print("a"); <- debugging tools
out:for (int j = 0; j < 9; j++) {
//System.out.print("b");
for (int h = 0; h < 10; h++)
bylo[h] = false;
//System.out.print("c");
{
int zaokr1 = i + 1, zaokr2 = j + 1; //setting values other than j and i +1
int resz; //bcouse i want to set values divided by 3
if (zaokr1 % 3 != 0) { //
resz = i % 3;
zaokr1 = zaokr1 + (3 - resz);//rounding up to 3 to determine in which 3x3 square we are
}
if (zaokr2 % 3 != 0) { // 1 2 3
resz = j % 3; // 4 5 6
zaokr2 = zaokr2 + (3 - resz); // 7 8 9
}
int c = i, d = j; //Here i take agan values from i and j
while (c > 0) { //
c--; //and i set values of numbers in column true to
bylo[tabela[c][d]] = true; //reroll them later
}
c = i;d = j; //same here
while (d > 0) { //
d--; //this time for rows
bylo[tabela[c][d]] = true; //
}
if (zaokr1 / 3 == 1 && zaokr2 / 3 == 1) //those are 3x3 squares from 1 - 9(
//this is first one
{
bylo[tabela[0][0]] = true;
bylo[tabela[0][1]] = true;
bylo[tabela[0][2]] = true;
bylo[tabela[1][0]] = true;
bylo[tabela[1][1]] = true;
bylo[tabela[1][2]] = true;
bylo[tabela[2][0]] = true;
bylo[tabela[2][1]] = true;
bylo[tabela[2][2]] = true;
}
if (zaokr1 / 3 == 1 && zaokr2 / 3 == 2)//second
{
bylo[tabela[0][3]] = true;
bylo[tabela[0][4]] = true;
bylo[tabela[0][5]] = true;
bylo[tabela[1][3]] = true;
bylo[tabela[1][4]] = true;
bylo[tabela[1][5]] = true;
bylo[tabela[2][3]] = true;
bylo[tabela[2][4]] = true;
bylo[tabela[2][5]] = true;
}
if (zaokr1 / 3 == 1 && zaokr2 / 3 == 3)//third
{
bylo[tabela[0][6]] = true;
bylo[tabela[0][7]] = true;
bylo[tabela[0][8]] = true;
bylo[tabela[1][6]] = true;
bylo[tabela[1][7]] = true;
bylo[tabela[1][8]] = true;
bylo[tabela[2][6]] = true;
bylo[tabela[2][7]] = true;
bylo[tabela[2][8]] = true;
}
if (zaokr1 / 3 == 2 && zaokr2 / 3 == 1)//fourth
{
bylo[tabela[3][0]] = true;
bylo[tabela[3][1]] = true;
bylo[tabela[3][2]] = true;
bylo[tabela[4][0]] = true;
bylo[tabela[4][1]] = true;
bylo[tabela[4][2]] = true;
bylo[tabela[5][0]] = true;
bylo[tabela[5][1]] = true;
bylo[tabela[5][2]] = true;
}
if (zaokr1 / 3 == 2 && zaokr2 / 3 == 2)//fifth
{
bylo[tabela[3][3]] = true;
bylo[tabela[3][4]] = true;
bylo[tabela[3][5]] = true;
bylo[tabela[4][3]] = true;
bylo[tabela[4][4]] = true;
bylo[tabela[4][5]] = true;
bylo[tabela[5][3]] = true;
bylo[tabela[5][4]] = true;
bylo[tabela[5][5]] = true;
}
if (zaokr1 / 3 == 2 && zaokr2 / 3 == 3)//sixth
{
bylo[tabela[3][6]] = true;
bylo[tabela[3][7]] = true;
bylo[tabela[3][8]] = true;
bylo[tabela[4][6]] = true;
bylo[tabela[4][7]] = true;
bylo[tabela[4][8]] = true;
bylo[tabela[5][6]] = true;
bylo[tabela[5][7]] = true;
bylo[tabela[5][8]] = true;
}
if (zaokr1 / 3 == 3 && zaokr2 / 3 == 1)//seventh
{
bylo[tabela[6][0]] = true;
bylo[tabela[6][1]] = true;
bylo[tabela[6][2]] = true;
bylo[tabela[7][0]] = true;
bylo[tabela[7][1]] = true;
bylo[tabela[7][2]] = true;
bylo[tabela[8][0]] = true;
bylo[tabela[8][1]] = true;
bylo[tabela[8][2]] = true;
}
if (zaokr1 / 3 == 3 && zaokr2 / 3 == 2)//eighth
{
bylo[tabela[6][3]] = true;
bylo[tabela[6][4]] = true;
bylo[tabela[6][5]] = true;
bylo[tabela[7][3]] = true;
bylo[tabela[7][4]] = true;
bylo[tabela[7][5]] = true;
bylo[tabela[8][3]] = true;
bylo[tabela[8][4]] = true;
bylo[tabela[8][5]] = true;
}
if (zaokr1 / 3 == 3 && zaokr2 / 3 == 3)//ninth
{
bylo[tabela[6][6]] = true;
bylo[tabela[6][7]] = true;
bylo[tabela[6][8]] = true;
bylo[tabela[7][6]] = true;
bylo[tabela[7][7]] = true;
bylo[tabela[7][8]] = true;
bylo[tabela[8][6]] = true;
bylo[tabela[8][7]] = true;
bylo[tabela[8][8]] = true;
}
}
//System.out.print("d");
int licznik=0;
for (int x = 0; x < 10; x++) {
if(bylo[x]==true){licznik++;} //here i count if all values are not blocked already
}
if(licznik==10)
{
if(i<=3){i=0;j=0;}
if(i>3&&i<=6) {i=3;j=0;}
if(i>6) {i=6;j=0;}
break out;//i read somwhere that this goes back to the certain point ;)
}
tabela[i][j] = RandomBeetween(1, 10);
if (bylo[tabela[i][j]] == true) {
do {
tabela[i][j] = RandomBeetween(1, 10);//randomizing numbers
} while (bylo[tabela[i][j]] == true);
bylo[tabela[i][j]] = true;//and setting their value in bool array to true
System.out.print(tabela[i][j]);
} else {
if (bylo[tabela[i][j]] == false) {
bylo[tabela[i][j]] = true;
System.out.print(tabela[i][j]);
}
//for(int x=0;x<10;x++)
// System.out.print(bylo[x]+" ");
}
//System.out.println("e ");
}
for(int a=0;a<9;a++)
System.out.print(tabela[i][a]+" ");System.out.print("f");
}
}
static int RandomBeetween ( int min, int max)//just random in custom range
{
Random random = new Random();
int a1 = random.nextInt(max - min);
int a2 = a1 + min;
return a2;
}
}
我不会试图找出你所有的代码。我将提出一个解决这个问题的基本方法。
首先,您使用的是面向对象编程语言。我先做一个数独游戏。首先,我会给出以下方法:
class SudokuPuzzle {
// A constructor that initializes to all zeros.
public SudokuPuzzle() { ... }
// Create a legal finished board
public randomizeBoard() { ... }
// Take the legal board and hide some squares to make it a puzzle
public turnIntoAPuzzle() { ... }
// Output
public display() { ... }
}
这样做会给你一个好的、干净的工作对象,它会把你的问题分解成更容易管理的部分。我想你会发现,即使是randomizeBoard()也很难。毕竟,想想数独的规则:
所以随机板()不是一个微不足道的任务。我已经为计算机编程45年了,我对如何编写它没有一个清晰的看法。
然后你可以进入turnIntoAPuzzle()。这实际上可能是一个更容易的问题。您可以随机选择一个单元格,并根据编程规则决定是否可以安全地隐藏该单元格。例如,在简易模式下,如果此单元格被隐藏:
如果是这样,牢房就可以安全地隐藏起来。您可以使用随机函数查找尚未隐藏的单元格,并查看规则。
对于中等硬度,添加如下规则:
如果在某个时候,您的所有测试都返回“不,我不能”,那么您将从未来的隐藏中删除该单元格-考虑并从剩余的尚未隐藏的单元格中随机选择。
循环,直到“可能能够隐藏”单元格列表为零。
--
这篇文章提供了一种处理类似问题的模式。分解它。弄清楚在没有电脑的情况下如何手动操作,然后将其转化为电脑的指令。
我认为随机化电路板实际上比隐藏一些单元更难,因为这是一个非常简单的算法。我不确定随机化的董事会是简单的,但也许它实际上并不坏。但我认为有可能走上不好的道路。
在 Java 中要生成一个指定范围之内的随机数字有两种方法:一种是调用 Math 类的 random() 方法,一种是使用 Random 类。 Random 类提供了丰富的随机数生成方法,可以产生 boolean、int、long、float、byte 数组以及 double 类型的随机数,这是它与 random() 方法最大的不同之处。random() 方法只能产生 double 类型的 0~1
我用随机数生成了一个简单的游戏。如果数字是正确的,请在文本字段中输入正确的数字,并与ramdom数字游戏相匹配,然后再次尝试。但如果号码与ramdom匹配,请始终显示消息,然后重试。我在下面写下了迄今为止我所做的尝试。 lbltxt上打印的文本是什么。getText()我等于txtRam txtfield,但no等于罚款,但显示为重试
问题内容: 我正在尝试获取0到100之间的随机数。但是我希望它们是唯一的,而不是在序列中重复。例如,如果我有5个数字,它们应该是82,12,53,64,32而不是82,12,53,12,32(我使用了这个数字),但是它在序列中生成相同的数字。 问题答案: Add each number in the range sequentially in a list structure. Shuffle i
问题内容: 我正在进行一些吞吐量测试。我的申请必须 从JMS读取 做一些处理 写入JMS 我的目标是模拟#2,“一些处理”。也就是说,在转发事件之前引入延迟并在给定时间(例如500ms)内占用CPU。 天真的方法是。这将导致正确的执行延迟,但不会占用CPU。 计算斐波纳契数是一种选择。 有没有人使用任何有趣的技术只是为了让CPU在给定时间内忙碌? 理想的特征是: 执行各种指令,而不是(例如)仅在循
问题是如何在Java中以编程方式生成证书链。换言之,我想用java执行此处详述的操作:http://fusesource.com/docs/broker/5.3/security/i382664.html 当然,我可以为新客户端创建RSA密钥: } 并生成相应的证书: } 然后我生成证书签名请求,并将其保存到csrFile文件: 哪里 现在我应该用CA私钥对CSR进行签名,但我不知道如何在java
本文向大家介绍Java使用Random类生成随机数示例,包括了Java使用Random类生成随机数示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java使用Random类生成随机数。分享给大家供大家参考,具体如下: 一 代码 二 运行 3 3 5 3 5 5 2 4 2 4 3 2 5 1 5 PS:这里再为大家提供几款功能类似的在线工具供大家参考: 在线随机数字/字符串生成工具: