Hi Leute, gleich mal als info bin ein Java Neuling..
ich hab folgendes problem, also wenn ich mein applet starte kann man 1 mal auf das "neu" button drücken dann stürzt das applet ab bzw. es reagiert nicht mehr.. ich hab keine ahnung warum :noe: langsam hab ich keine lust mehr..
wäre für jede hilfe dankbar
hier mein quelltext
ich hab folgendes problem, also wenn ich mein applet starte kann man 1 mal auf das "neu" button drücken dann stürzt das applet ab bzw. es reagiert nicht mehr.. ich hab keine ahnung warum :noe: langsam hab ich keine lust mehr..
hier mein quelltext
Java:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
public class Sudoku extends Applet implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel panel1 = new JPanel();
JLabel label1 = new JLabel("Sudoku");
JPanel pnlLinks = new JPanel( new FlowLayout() );
JTextArea txtArea1 = new JTextArea();
JPanel pnlRechts = new JPanel( new FlowLayout() );
JButton btnNeu = new JButton("Neu");
ArrayList<String> listOneLine = new ArrayList<String>();
ArrayList<ArrayList<String>> listLevelOneLine = new ArrayList<ArrayList<String>>();
ArrayList<sudokuObject> listSudokus = new ArrayList<sudokuObject>();
public static char[] used = {'1','2','3','4','5','6','7','8','9'};
/** Maximale Anzahl Sudokus */
int maxCountSudokus = 1;
int countCheck = 0;
public void init () {
panel1.setPreferredSize(new Dimension(500,500));
txtArea1.setPreferredSize( new Dimension(300,200));
btnNeu.setPreferredSize( new Dimension(100,50));
btnNeu.addActionListener(this);
txtArea1.setBorder(BorderFactory.createTitledBorder("Text-Area"));
panel1.setLayout(new BorderLayout());
panel1.add(label1, BorderLayout.NORTH);
//panel1.add(label1, BorderLayout.EAST);
panel1.add(pnlLinks, BorderLayout.WEST);
panel1.add(pnlRechts, BorderLayout.EAST);
pnlLinks.add(txtArea1);
pnlRechts.add(btnNeu);
add(panel1);
}
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("Neu")) {
try {
ArrayList<String> list = generate();
txtArea1.setText("");
for (String string : list) {
txtArea1.append(string + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public Sudoku()
{
}
/**
* Generieren Sukdoku
*/
public ArrayList<String> generate()
throws Exception
{
// Laden eindeutige Lines
//Date dstart = new Date();
char[] checkArray = {' ',' ',' ',' ',' ',' ',' ',' ',' '};
checkChar(0, checkArray);
// Fuer jeden Level eine eigene Liste
for (int i = 0; i < 9; i++)
{
ArrayList<String> newList = new ArrayList<String>();
int aktPos = (int) (Math.round((Math.random() * ((double)listOneLine.size()))));
for (int j = 0; j < listOneLine.size(); j++)
{
newList.add(listOneLine.get(aktPos));
aktPos++;
if (aktPos >= listOneLine.size())
aktPos = 0;
}
listLevelOneLine.add(newList);
}
// Arrangieren eindeutige Lines
for (String firstLine : listLevelOneLine.get(0))
{
sudokuObject so = new sudokuObject();
so.add(firstLine);
checkSudoku(1, so);
if (listSudokus.size() >= maxCountSudokus)
break;
}
ArrayList<String> result = new ArrayList<String>();
for (sudokuObject so : listSudokus)
{
result.add(so.toString());
}
return result;
}
private void checkChar(int level
,char[] checkArray)
{
int nextLevel = level + 1;
for (char pos : used)
{
if (in(pos, checkArray) == false)
{
checkArray[level] = pos;
// Naechste Stufe
if (nextLevel < checkArray.length)
{
checkChar(nextLevel, checkArray);
for (int i = nextLevel; i < checkArray.length; i++)
{
checkArray[i] = ' ';
}
}
else // Ende
{
listOneLine.add(new String(checkArray));
return;
}
}
}
}
private void checkSudoku(int level
,sudokuObject so)
{
int nextLevel = level + 1;
for (String nextLine : listLevelOneLine.get(level))
{
countCheck++;
if (so.checkLine(nextLine) == true)
{
sudokuObject soNew = so.clone();
soNew.add(nextLine);
if (nextLevel < 9) // Naechster Level
{
checkSudoku(nextLevel, soNew);
if (listSudokus.size() >= maxCountSudokus)
return;
}
else // New
{
listSudokus.add(soNew);
if (listSudokus.size() >= maxCountSudokus)
return;
}
}
}
}
// ---------------------------------------------------------
/** Pruefen, ob der uebergebene Integerwert in dem angegebenen
* Array enthalten ist.
* @param nWert zu pruefender Integer-Wert
* @param nArrray Array mit dem Integer-Werten (1-Dimensional)
*/
public static boolean in(char cWert
,char[] cArray)
{
if (cArray != null)
{
for (int nI = 0; nI < cArray.length; nI++)
{
// Uebereinsteimmung
if (cArray[nI] == cWert)
return true;
}
}
return false;
}
class sudokuObject
{
String[] sudokuLines = new String[9];
/**
* Line dazufuegen
* @param line
*/
public void add(String line)
{
for (int i = 0; i < 9; i++)
{
if (sudokuLines[i] == null)
{
sudokuLines[i] = line;
return;
}
}
}
/**
* Line pruefen
* @return TRUE wenn keine Uebereinstimmung, FALSE wenn schon
*/
public boolean checkLine(String line)
{
for (String sudokuLine : sudokuLines)
{
if (sudokuLine == null)
break;
for (int i = 0; i < 9; i++)
{
if (sudokuLine.charAt(i) == line.charAt(i))
return false;
}
}
return true;
}
/**
* Sudoku ausgeben
*/
public String toString()
{
StringBuffer sbResult = new StringBuffer();
for (String sudokuLine : sudokuLines)
{
if (sbResult.length() > 0)
sbResult.append('\n');
sbResult.append(sudokuLine);
}
return sbResult.toString();
}
public sudokuObject clone()
{
sudokuObject so = new sudokuObject();
for (int i = 0; i < 9; i++)
{
so.sudokuLines[i] = sudokuLines[i];
}
return so;
}
}
}
Zuletzt bearbeitet: