Übungsblatt 4, Rechnerübung 7

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Übungsblatt 4, Rechnerübung 7
Hier meine Lösung zu dieser Aufgabe. Ist in manchen Punkten etwas umständlich denke ich, aber ich kanns net besser. Bin froh über jede Optimierung. :-/

public class Vektor
{
	private double komponenten[];
	
	public static void main(String args[])
	{
		Vektor vektor1 = new Vektor(3);
		Vektor vektor2 = new Vektor(3);
		vektor1.komponenten[0]=1;
		vektor1.komponenten[1]=2;
		vektor1.komponenten[2]=3;
		vektor2.komponenten[0]=5;
		vektor2.komponenten[1]=6;
		vektor2.komponenten[2]=3;
		
		System.out.print("Vektor1: ");
		System.out.println(toString(vektor1));
		System.out.print("Vektor2: ");
		System.out.println(toString(vektor2));
		System.out.print("Summer der Vektoren: ");
		System.out.println(toString(add(vektor1,vektor2)));
		System.out.println("Betrag von Vektor1: "+betrag(vektor1));
		System.out.println("Betrag von Vektor2: "+betrag(vektor2));
		
					
	}
	
	public Vektor (int length)
	{
		if (length > 0)
	    	komponenten = new double[length];
	    else
	    	komponenten = null;
	}
	public void setKoordinate(int i, double wert)
	{
		komponenten[i]=wert;
	}
	public static Vektor add (Vektor v1, Vektor v2)
	{
		if (v1.komponenten.length != v2.komponenten.length)
		{
			System.out.println("Vektoren haben unterschiedliche Längen.");
			return null;
		}
		else 
		{
			Vektor v3 = new Vektor(v1.komponenten.length);
			for (int k=0;k < v1.komponenten.length; k++)
			{
				v3.komponenten[k]=v1.komponenten[k]+v2.komponenten[k];
			}
			return v3;
			
		}
	}
	public static double betrag (Vektor v1)
	{
		double  wert=0;
		for (int k=0;k<v1.komponenten.length;k++)
		{
			wert=wert + (v1.komponenten[k]*v1.komponenten[k]);
		}
		return Math.sqrt(wert);
	}
	static public String toString(Vektor v1)
	{
		for (int k=0;k < v1.komponenten.length;k++)
		{
			System.out.print(v1.komponenten[k]+"/");
		}
		return "";
	}
}


hier is mal meine Lösung:

class Vektor
{
	private double komponenten[];
	
	public Vektor(int length) {
		if (length > 0) {
			komponenten = new double[length];
		} else {
			komponenten = null;
		}
	}
	
	private void setKoordinate(int i, double wert) {
		if (i < komponenten.length) {
			komponenten[i] = wert;
		}
	}
	
	public static Vektor add(Vektor a, Vektor b) {
		if (a.komponenten.length == b.komponenten.length) {
			Vektor aPlusB = new Vektor(a.komponenten.length);
			for (int i = 0; i < aPlusB.komponenten.length; i++) {
				double value = a.komponenten[i] + b.komponenten[i];
				aPlusB.setKoordinate(i, value);
			}
			return aPlusB;
		} else {
			return null;
		}
	}
	
	private double betrag() {
		double value = 0;
		for (int i = 0; i < komponenten.length; i++) {
			value += komponenten[i] * komponenten[i];
		}
		return Math.sqrt(value);
	}
	
	public String toString() {
		String vektorString = "";
		for (int i = 0; i < komponenten.length - 1; i++) {
			vektorString += komponenten[i];
			vektorString += "/";
		}
		vektorString += komponenten[komponenten.length - 1];
		return vektorString;
	}
	
	public static void main(String[] args) {
		Vektor v1 = new Vektor(3);
		Vektor v2 = new Vektor(3);
		Vektor v3 = new Vektor(4);
		
		v1.setKoordinate(0, 1.0);
		v1.setKoordinate(1, 2.0);
		v1.setKoordinate(2, 3.0);
		v1.setKoordinate(3, 4.0);		
		v1.setKoordinate(4, 5.0);
		
		System.out.println("Vektor1: " + v1.toString());

		v2.setKoordinate(0, 4.0);
		v2.setKoordinate(1, 5.0);
		
		System.out.println("Vektor2: " + v2.toString());

		v3.setKoordinate(0, 7.0);
		v3.setKoordinate(1, 8.0);
		v3.setKoordinate(2, 9.0);
		v3.setKoordinate(3, 10.0);
		
		System.out.println("Vektor3: " + v3.toString());

		System.out.println ("\n" + v1.toString() + " + " + v2.toString() + 
							" = " + add(v1, v3).toString());	
	}		
}