Erste Schritte public oder static oder wie?

paule32

Neues Mitglied
Hallo,

habe mich mal als C Programmierer an Java gewagt.
unter Linux Debian 6 squeeze habe ich folgendes Programmchen.
doch leider lässt sich das nicht compilieren.
ich weiss nicht mehr weiter.
danke für Hilfe

Java:
import java.io.*;

class TeachPerceptronTest
{
	TeachPerceptron t;

	void testAllPattern()
	{
		System.out.println(" Test aller Muster: ");
		for (int m = 0; m < t.nPattern; m++)
		{
			System.out.println(m + " Muster: ");
			//testPattern(m);
		}
	}

	public static void main(String[] args)
	{
		t = new TeachPerceptron(4,10);
		testAllPattern(t);    t.teachPerceptron(8);
		testAllPattern(t);
	}
}



Code:
root@kalli:/home/jkallup/apps/ki# javac TeachPerceptronTest.java
TeachPerceptronTest.java:19: non-static variable t cannot be referenced from a static context
		t = new TeachPerceptron(4,10);
		^
TeachPerceptronTest.java:20: non-static variable t cannot be referenced from a static context
		testAllPattern(t);    t.teachPerceptron(8);
		               ^
TeachPerceptronTest.java:20: testAllPattern() in TeachPerceptronTest cannot be applied to (TeachPerceptron)
		testAllPattern(t);    t.teachPerceptron(8);
		^
TeachPerceptronTest.java:20: non-static variable t cannot be referenced from a static context
		testAllPattern(t);    t.teachPerceptron(8);
		                      ^
TeachPerceptronTest.java:21: non-static variable t cannot be referenced from a static context
		testAllPattern(t);
		               ^
TeachPerceptronTest.java:21: testAllPattern() in TeachPerceptronTest cannot be applied to (TeachPerceptron)
		testAllPattern(t);
		^
6 errors
root@kalli:/home/jkallup/apps/ki#
 
Such mal hier im Forum nach dem Fehler. Du wirst mit Threads überschüttet werden, die sich um diese Frage drehen. Vielleicht die am häufigsten gestellte Frage.
 
Such mal hier im Forum nach dem Fehler. Du wirst mit Threads überschüttet werden, die sich um diese Frage drehen. Vielleicht die am häufigsten gestellte Frage.

Hm, die am häufigste gestellte Frage müsste String-Vergleiche mit == sein 😉

@TO: Eine Methode/Funktion ohne formale Parameter lässt sich doch auch in C nicht mit Parametern aufrufen ???:L
 
Mal ganz pragmatisch:

Java:
 public static void main(String[] args)
    {
        TeachPerceptron t = new TeachPerceptron(4,10);
        testAllPattern(t);    t.teachPerceptron(8);
        testAllPattern(t);
    }

EDIT: dass löst aber zunächst nur dein Problem mit static; es sind aber noch mehr in dem Programm (Signatur des Konstruktors).
 
Zuletzt bearbeitet:
hier der code

Java:
public class TeachPerceptron
{
	SimplePerceptron p;
	double learningRate = 0.2;
	int currPattern = 0;
	int nPattern;

	double[][] inputPattern =
	{
		{ 0, 0, 0, 0 }, // Ziffer 0
		{ 0, 0, 0, 1 }, // Ziffer 1
		{ 0, 0, 1, 0 }, // Ziffer 2
		{ 0, 0, 1, 1 }, // Ziffer 3
		{ 0, 1, 0, 0 }, // Ziffer 4
		{ 0, 1, 0, 1 }, // Ziffer 5
		{ 0, 1, 1, 1 }, // Ziffer 6
		{ 1, 0, 0, 0 }, // Ziffer 7
		{ 1, 0, 0, 1 }, // Ziffer 8
		{ 1, 0, 1, 0 }, // Ziffer 9
		{ 1, 0, 1, 1 }, // Ziffer 10
		{ 1, 1, 0, 0 }, // Ziffer 11
		{ 1, 1, 0, 1 }, // Ziffer 12
		{ 1, 1, 1, 1 }  // Ziffer 13
	};

	double[][] outputPattern =
	{
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Ziffer 0
		{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Ziffer 1
		{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Ziffer 2
		{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Ziffer 3
		{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Ziffer 4
		{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // Ziffer 5
		{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, // Ziffer 6
		{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, // Ziffer 7
		{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, // Ziffer 8
		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, // Ziffer 9
		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, // Ziffer 10
		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // Ziffer 11
		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, // Ziffer 12
		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }  // Ziffer 13
	};

	// zu implementieren ... komme nicht weiter
        // soll da nun XOR oder UND ???
	void testPattern(int m)
	{
	}

	void testAllPattern()
	{
		System.out.println(" Test aller Muster: ");
		for (int m = 0; m < nPattern; m++)
		{
			System.out.println(m + " Muster: ");
			testPattern(m);
		}
	}

	public TeachPerceptron(int ninp, int nout)
	{
		p = new SimplePerceptron(ninp, nout);
		nPattern = inputPattern.length;

		if (nPattern > outputPattern.length)
		System.out.println(" FEHLER: Ungleiche Anzahl von Eingabe- und Ausgabe-Mustern!");
	}

	void setOutputPattern(double[] pat)
	{
		for (int i = 0; i < p.nInputNeuron; i++)
		p.inputNeuron[i] = pat[i];
	}

	// n-maliges trainieren aller Muster ...
	public void teachPerceptron(int N)
	{
		for (int k = 0; k < N; k++)
		{
			for (int m = 0; m < nPattern; m++)
			{
				p.setInputPattern(inputPattern[m]);
				p.propagate();

				for (int j = 0; j < p.nOutputNeuron; j++)
				if (p.outputNeuron[j] != outputPattern[m][j])
				for (int i = 0; i < p.nInputNeuron; i++)
				{
					p.weight[j][i] = p.weight[j][k]
					+ learningRate
					* p.inputNeuron[i]
					*(outputPattern[m][j] - p.outputNeuron[j]);
				}
			}
		}
	}
}


class TeachPerceptronTest
{
	public static void main(String[] args)
	{
		TeachPerceptron t =  new TeachPerceptron(4,10);
		t.testAllPattern();    t.teachPerceptron(4);
		t.testAllPattern();
	}
}


class SimplePerceptron
{
	int nInputNeuron = 4;
	int nOutputNeuron = 10;
	int nNeuron = nInputNeuron + nOutputNeuron;

	double[] inputNeuron;
	double[] outputNeuron;
	double[][] weight;
	double bias = 0.5;

	SimplePerceptron(int inp, int out)
	{
		nInputNeuron  = inp;
		nOutputNeuron = out;
		nNeuron = nInputNeuron + nOutputNeuron;

		inputNeuron  = new double[nInputNeuron];
		outputNeuron = new double[nOutputNeuron];

		weight = new double[nOutputNeuron][nInputNeuron];

		for (int i = 0; i < nOutputNeuron; i++)
		for (int j = 0; j < nInputNeuron; j++)
			weight[i][j] = 0.0;
	}

	void setInputPattern(double[] pat)
	{
		for (int i = 0; i < nInputNeuron; i++)
		inputNeuron[i] = pat[i];
	}

	void propagate()
	{
		for (int i = 0; i < nOutputNeuron; i++)
		{
			double netinp = 0.0;

			for (int j = 0; j < nInputNeuron; j++)
			{
				netinp = netinp + weight[i][j] * inputNeuron[j];

				if (netinp >= 0.5)
				outputNeuron[i] = 1.0; else
				outputNeuron[i] = 0.0;
			}
		}
	}
}
 

Neue Themen


Zurück
Oben