- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在编写一个数独解决程序,但我遇到了以下错误:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.util.HashMap.hash(Unknown Source)
at java.util.HashMap.getEntry(Unknown Source)
at java.util.HashMap.get(Unknown Source)
at sun.awt.AppContext.get(Unknown Source)
at sun.awt.SunToolkit.flushPendingEvents(Unknown Source)
at java.awt.EventQueue.postEvent(Unknown Source)
at java.awt.EventQueue.invokeLater(Unknown Source)
at javax.swing.SwingUtilities.invokeLater(Unknown Source)
at javax.swing.text.DefaultCaret.changeCaretPosition(Unknown Source)
at javax.swing.text.DefaultCaret.handleSetDot(Unknown Source)
at javax.swing.text.DefaultCaret.setDot(Unknown Source)
at javax.swing.text.DefaultCaret$Handler.insertUpdate(Unknown Source)
at javax.swing.text.AbstractDocument.fireInsertUpdate(Unknown Source)
at javax.swing.text.AbstractDocument.handleInsertString(Unknown Source)
at javax.swing.text.AbstractDocument.insertString(Unknown Source)
at javax.swing.text.PlainDocument.insertString(Unknown Source)
at javax.swing.text.AbstractDocument.replace(Unknown Source)
at javax.swing.text.JTextComponent.setText(Unknown Source)
我找不到这个错误的原因。我的程序代码如下:
package code;
import java.awt.Color; //Import nötiger Klassen
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SOLVE implements ActionListener{
private int[][] matrix; //Eingelesenes Sudokufeld
private boolean[][]input; //Überfrüfungsfeld zur bestimmung von eingegebenen Zahlen
private JFrame fenster; //GUI Fenster
private JTextArea field[][]; //GUI Text Sudoku Feld
private JButton start; //Start Button
private JButton reset;
public void gui(){ //Erstellt die Grafische Oberfläche
Border b1 = BorderFactory.createLineBorder( Color.black );
//Erstellt Fenster
fenster = new JFrame();
fenster.setLocation(100, 100);
fenster.setSize(500, 320);
fenster.getContentPane().setLayout(null);
fenster.setTitle("Sudoku Solver");
//Erstellt Sudoku TextFelder
field = new JTextArea[9][9];
int x = 0; //x-Koordinate
for(int i=0;i<9;i++){
int y = 0; //y-Koordinate
for(int j=0;j<9;j++){
field[i][j] = new JTextArea();
field[i][j].setLocation((200+x),(30+y));
field[i][j].setSize(20, 20);
field[i][j].setText("0");
field[i][j].setBorder(b1);
field[i][j].setVisible(true);
fenster.add(field[i][j]);
if(j==2||j==5){
y=y+32;
}
else{
y=y+25;
}
}
if(i==2||i==5){
x=x+32;
}
else{
x=x+25;
}
}
//Erstellt Start Button
start = new JButton();
start.setText("Solve");
start.setSize(150,50);
start.setLocation(30,30);
start.addActionListener(this);
//Erstellt Reset Button
reset = new JButton();
reset.setText("Reset");
reset.setSize(150,50);
reset.setLocation(30,100);
reset.addActionListener(this);
//Fügt Komponenten zum Fenster hinzu
fenster.add(reset);
fenster.add(start);
fenster.setVisible(true);
}
public SOLVE(){ //Startet Klasse
gui();
matrix = new int[9][9];
input = new boolean[9][9];
}
public void copy(){ //Einlesen der TextFelder in die Matrix une Überprüfungs Matrix
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
matrix[i][j]=Integer.parseInt(field[i][j].getText());
if(matrix[i][j]!=0){
input[i][j]=false;
}
else{
input[i][j] = true;
}
}
}
}
public boolean check(int x,int y, int solution){ //Überprüfung ob Lösung möglich ist für eine bestimmte Zahl bei einem bestimmten Feld
boolean moeglich = false; //Insgesammt möglich
boolean wmoeglich = true; //Waagrecht möglich
boolean smoeglich = true; //Senkrecht möglich
boolean fmoeglich = true; //Feld möglich
//Überprüft waagrecht und senkrecht ob möglich
for(int i=0;i<9;i++){
if(matrix[x][i]==solution){
wmoeglich = false;
}
if(matrix[i][y]==solution){
smoeglich = false;
}
}
//Sucht nötiges Feld und überprüft dieses
//Oberste Reihe
if(x<3){
//linkes Feld
if(y<3){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
//mittleres Feld
else if(y<6&& y>2){
for(int i=0;i<3;i++){
for(int j=3;j<6;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
//rechtes Feld
else if(y<9 && y>5){
for(int i=0;i<3;i++){
for(int j=6;j<9;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
}
//mittlere Reihe
else if(x<6 && x>2){
//linkes Feld
if(y<3){
for(int i=3;i<6;i++){
for(int j=0;j<3;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
//mittleres Feld
else if(y<6 && y>2){
for(int i=3;i<6;i++){
for(int j=3;j<6;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
//rechtes Feld
else if(y<9 && y>5){
for(int i=3;i<6;i++){
for(int j=6;j<9;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
}
//unterste Reihe
else if(x<9 && x>5){
//linkes Feld
if(y<3){
for(int i=6;i<9;i++){
for(int j=0;j<3;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
//mittleres Feld
else if(y<6 && y>2){
for(int i=6;i<9;i++){
for(int j=3;j<6;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
//rechtes Feld
else if(y<9 && y>5){
for(int i=6;i<9;i++){
for(int j=6;j<9;j++){
if(matrix[i][j]==solution){
fmoeglich = false;
}
}
}
}
}
//wenn eine Überprüfung fehlgeschlagen Lösung nicht möglich
if(smoeglich == true && wmoeglich == true && fmoeglich == true){
moeglich = true;
}
return moeglich;
}
public void search(int i, int j){ //Lösen des Sudokus (Eigentlich Rekursiv)
if(input[i][j]==true){ //Wenn keine menschliche eingabe
int l = 1;
for(l=1;l<10;l++){
if(check(i,j,l)==true){ //Wenn Überprüfung erfolgreich war
matrix[i][j]=l; //Schreibt Lösung in Matrix
field[i][j].setText(""+l); //Und Schreibt Lösung in TextFeld
//Nachfolger suchen
if(i<=7){
search(i+1,j);
}
else if(i==8 && j<=7){
search(i-8,j+1);
}
else{
break;
}
}
//Da Rekursion nicht funktionierte hier den Schritt zurück
else if(check(i,j,l)==false && l==9){
matrix[i][j]=0;
if(i>0){
search(i-1,j);
}
else if(i==0 && j>0){
search(i+8,j-1);
}
else{
break;
}
}
}
}
else{
//Nachfolger suchen
if(i<=7){
search(i+1,j);
}
else if(i==8 && j<=7){
search(i-8,j+1);
}
else{}
}
}
public void reset(){ //Resettet Fenster und Matrix
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
field[i][j].setText("0");
matrix[i][j]=0;
input[i][j]=true;
}
}
}
public void master(){ //Master Methode (Führt die nötigen Methoden nacheinander aus)
System.gc();
copy();
search(0,0);
}
public static void main(String[] args) { //Main Methode (Start Methode)
new SOLVE();
}
public void actionPerformed(ActionEvent evt){ //Button Abfrage
Object source = evt.getSource();
if(source==start){ //Wenn Button 'start' keklckt wird Methode main ausführen
master();
}
else if(source == reset){
reset();
}
}
}
这个错误的原因可能是什么?很抱歉代码中的注释是德语,但如果您需要,我可以将它们翻译成英语。
最佳答案
据我所知,“AWT-EventQueue-0”异常是在您使用 HashMap 执行异步操作时产生的。我强烈建议您将 View 与模型分开!如果有必要,还要分离 Controller :
http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
您是否从执行停止的那一行得到了一个数字?因为这确实有助于确定问题的根源。您也可以对代码进行调试。我推荐 Eclipse (Indigo),因为它有一个很好的内置调试器和许多其他巧妙的东西。它在你身上成长!
小贴士
尝试按照问题形式:
https://stackoverflow.com/questions/how-to-ask
因为当您留下 3 页完全不相关的代码时,这真的很难!(关于语言;我认为德语中的注释和变量名称并不难理解。我的意思是,我知道您正在实例化什么,因此名称可以是“asdf”或“foobar”,我只关心。)
此外,请务必将类的构造函数放在类变量减速后的第一个方法中;因为这使得快速识别它变得容易得多。
关于java - 找不到错误 (StackOverflowError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996820/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!