Wyznacznik macierzy

0

Witam, znalazłem taki kod programu, który wylicza wyznacznik macierzy, lecz gdy chcę go uruchomić to wyskakuje mi że nie może znaleźć klasy Main, mógłby mi ktoś powiedzieć gdzie i jak mam ją dodać?
Z góry wielkie dzięki za pomoc ;)

package wyznacznik;

/*
 * Wyznacznik macierzy
 * 
 * autor: Bartosz Lewandowski
 * 
 * Instrukcja:
 * Po podaniu rozmiaru macierzy nalezy przycisk Generuj aby utworzyc
 * grida do wprowadzania wartosci elementow macierzy.
 * Wartosci bledne lub puste beda zinterpretowane jako 0.
 * 
 *  Po wybraniu opcji Licz zostanie wyswietlony wyznacznik macierzy.
 */

import java.applet.Applet;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Det extends Applet implements ActionListener{
	private static final long serialVersionUID = 1L;
	JTable table;
	JButton btnGen = new JButton("Generuj");
	JButton btnLicz = new JButton("Licz");
	JTextField txt = new JTextField(5);
	float matrix[][];
	
	 
	
	public void init()
	{
		this.setSize(460,300);
		this.setLayout(null);
		JLabel l = new JLabel("Iloć wierszy"); 
		this.add(l);
		txt.setText("5");
		this.add(txt);
		this.add(btnGen);
		this.add(btnLicz);
		
		//podlaczenie listeneera do buttonow
		btnGen.addActionListener(this);
		btnLicz.addActionListener(this);
		
		l.setBounds(10, 20, 400, 24);
		btnGen.setBounds(100,50,95,18);
		btnLicz.setBounds(200,50,95,18);
		txt.setBounds(20,50,80,18);
	}
	
	public void initMatrix()
	{
		int rowsColsCount; 
		//gdy ilosc kolumn nie jest liczba to zakladamy 5
		try {
			rowsColsCount = Integer.valueOf(txt.getText());
		} catch (Exception e) {
			rowsColsCount = 5;
		}
		matrix = new float[rowsColsCount][rowsColsCount];
				
		if (table!=null) this.remove(table);
		DefaultTableModel model = new DefaultTableModel(rowsColsCount,rowsColsCount);
		table = new JTable(model);		
		table.setShowGrid(true);
		table.setBorder(BorderFactory.createLineBorder(Color.black));
		
		table.setBounds(new Rectangle(40,80,rowsColsCount*25,rowsColsCount*25));
			
		table.setRowHeight(25);
		
		TableColumn column;
		for (int a=0;a<table.getColumnCount();a++)
		{
			column = table.getColumnModel().getColumn(a);
			column.setWidth(25);
		}
		this.add(table);
		
		this.repaint();
		
	}
	
	//obliczenie wyznacznika macierzy
	public float det(float[][] matrix, int dim) {
		float buffer[][];
		float result = 0;
		if (dim == 1) 
		{
			return matrix[0][0];
		} 
		else 
		{
			buffer = new float[dim - 1][dim - 1];
			for (int a = 0; a < dim; a++) 
			{
				for (int b = 0; b < dim - 1; b++) 
				{
					for (int k = 0; k < dim - 1; k++) 
					{
						if (k<a)
						{
							buffer[b][k] = matrix[b + 1][k];
						}
						else
						{
							buffer[b][k] = matrix[b + 1][k+1];
						}							
					}
				}
				if (a % 2 == 0) //minory (znak) i obliczenie kolejnej macierzy
				{
					result += matrix[0][a] * det(buffer, dim - 1);
				} 
				else 
				{
					result -= matrix[0][a] * det(buffer, dim - 1);
				}
			}
			return result;
		}
	}

	

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==btnGen)
		{
			this.initMatrix();
		}
		if (e.getSource()==btnLicz)
		{
			for (int a=0;a<matrix.length;a++)
			{
				for (int b=0;b<matrix.length;b++)
				{
					//wartosci domyslne (gdy nie ma liczby to zero)
					float value =0;
					try {
						value = Float.valueOf(table.getValueAt(a, b).toString());
					} catch (Exception ex) {
						value = 0;
						table.setValueAt("0", a,b);
					}
					matrix[a][b] = value;
				}			
			}
			try {
				JOptionPane.showMessageDialog(this,"Wyznacznik macierzy wynosi: "+det(matrix,matrix.length),"Info",1);
			} catch (Exception e2) 
			{
				JOptionPane.showMessageDialog(this,"Nie można obliczyć wyznacznika.","Błšd",1);
			}
		}
	}
}
1

To jest aplet Javy. Nie posiadają one metody main a jedynie odpowiedni cykl życia złożony z metod - init(), start(), stop(), destroy(). Aplety są to takie aplikacje uruchamiane z poziomu przeglądarki internetowej. W tym wypadku masz jedynie metodę init(), w której inicjowane są obiekty klasy.

1

Uruchomienie lokalnego (tzn. takiego, który jest na Twoim komputerze) apletu za pośrednictwem przeglądarki jest prawie niemożliwe.

  1. Utwórz plik HTML o takiej z grubsza zawartości:
<!doctype html>
<html>
<head>
   <title>Wyznaczniki</title>
</head>
<body>
<p>
<applet width="460" height="300" code="wyznacznik.Det">
</applet>
<p>

<hr>
<body>
</html>

i nazwij go np. tester.html.
2. W folderze gdzie jest plik tester.html utwórz folder o nazwie wyznacznik (nazwa jest obowiązkowa).
3. W utworzonym folderze umieść plik Det.class.
4. Wpisz polecenie appletviewer tester.html.

2

Krótki opis przeróbki na program desktopowy:

//dodaj niezbędne importy, w skrócie
import javax.swing.*;
//zmień
public class Det extends Applet implements ActionListener{
//na
public class Det extends JFrame implements ActionListener{ 
//dopisz metodę main
    public static void main(String[] args)
    {
        new Det();
    }
//zamień wiersz
public void init()
//na
public Det()
//na końcu konstruktora klasy Det (po txt.setBounds(...)) dopisz
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
0

ok wielkie dzięki za pomoc :)

0

O ile dobrze pamiętam do uruchamiania apletów wystarczało oczywiście oprogramowanie WAMP (np. USBWebServer) wygenerowanie jara i wygenerowanie odpowiedniego certyfikatu, a następnie podpisanie pliku i odpalenie go w przeglądarce.

1 użytkowników online, w tym zalogowanych: 0, gości: 1