Variablen Variable wird nicht benutzt

Splinter479

Mitglied
Hi,
ich gebe, zu ich bin ganz allgemein kein sooo guter Java-Programmierer, deswegen hoffe ich, dass das 'Problem' hier leicht beantwortet werden kann. Als ich kürzlich von C++ mal in JAVA reinschnuppern wollte, machten mir die einfachsten Dinge einen Strich durch die Rechnung.

Ich wollte in einem einfachen Beispiel mal ganz simpel eine Funktion zur Vektoraddition schreiben, die
- erst die Vektoren auf gleiche Größe prüft und
- dann die Einträge schrittweise addiert.

Ich habe bislang zwei Ansätze, die zwar richtig addieren, aber nicht den ERROR ausgeben, wenn die Dimensionen nicht stimmen. Ich glaube, da stimmt irgendwas nicht mit der Bool-Variable "same", denn die hat scheinbar keine Auswirkung.

1. Versuch mit Unterteilung in Funktionen:

Java:
public class HelloWorld 
{
	public static void main(String[] args) 
	{
	int [] a = {1, 2, 3, 4, 5};
	int [] b = {5, 6, 7, 8, 9};
	boolean same = false;
	
	compareIfSameLength(same, a, b);
	add(same , a, b);
	}
	
	public static boolean compareIfSameLength(boolean same, int [] a, int [] b) {
		
		if (a.length == b.length)
			same = true;
		else
			same = false;
	return same;
	}
	
	public static void add (boolean same, int [] a, int [] b) {	
		
		if (same = true){
			
			int [] c = new int [a.length];
			
			for (int i=0; i < a.length; i++ ){
				c[i] = a[i] + b[i];
			}
		
			
			for (int j=0; j < c.length; j++){
				System.out.println(c[j]);
			}
		
		}
		
		else { System.out.println("Error: Vectors do not have the same size."); }
	
	}
}

2. Versuch ohne Funktionen (alles in der main):

Java:
public class addVector
{

	public static void main(String[] args)
	{
	
		int [] a = {1, 2, 3, 4, 5};
		int [] b = {5, 6, 7, 3, 8, 9};
		int [] c = new int [a.length];
		boolean same = false;
	
			
		if (a.length == b.length)
			same = true;
			
		else
			same = false;
		
		
			
		if (same = true)
			{
				for (int i=0; i < a.length; i++ )
				{
					c[i] = a[i] + b[i];
				}
			
				for (int j=0; j < c.length; j++)
				{
					System.out.println(c[j]);
				}
			}
			
			else { System.out.println("Error: Vectors do not have the same size."); }
		
	}

}

Ich behaupte mal, eine geübter Java-Blick löst das hoffentlich recht schnell. 😳
In jedem Fall vielen Dank!
greez Splinter
 
Hier ist der Fehler
Code:
if (same = true)
Vergleiche mit
Code:
==
😉
 
statt
Java:
compareIfSameLength(same, a, b);
musst du
Java:
same = compareIfSameLength(same, a, b);

schreiben. Kannst dir die Übergabe von same dann auch sparen. boolean ist immutable, kann also nicht verändert werden von anderen Methoden.
 
was ist denn die Frage/ das Problem?

if (same = true)
ist kein Vergleich sondern eine Zuweisung

if (same == true)
oder einfach nur
if (same)
hätte andere Auswirkungen
 
Auserdem sind in Java primitive Datentypen keine Referenzen,d.h. sie werden Call-By-Value übergeben. Somit ist der Aufruf von
Code:
compareIsSameLength
wirkungslos und der Parameter same somit sinnlos. Du müsstest schreiben:
Code:
same=compareIsSameLength(a,b);

Der Vergleich auf true ist übrigens überflüssig, da ein boolean in Java nur true oder false sein kann, und nicht so wie in C++ eine Zahl ist.
 
Cool.
Soweit erstmal vielen Dank. Ich hab das Programm mit den Tips umgeschrieben und es funktioniert jetzt auch einwandfrei.
Allerdings musste ich noch in die Methode compareIfSameLength lokal nochmal same deklarieren. Das macht für mich keinen Sinn. Kann mir das jemand (einfach^^) erklären?

Nochmals vielen Dank.

Java:
public class HelloWorld 
{
	public static void main(String[] args) 
	{
	int [] a = {1, 2, 3, 4, 5};
	int [] b = {5, 6, 7, 3, 4, 9};
	
	boolean same = compareIfSameLength(a, b);
	add(same , a, b);
	}
	
	public static boolean compareIfSameLength(int [] a, int [] b) {
		
		boolean same;
		
		if (a.length == b.length)
			same = true;
		else
			same = false;
		
		return same;
             }

................

greez Splinter ???:L
 
Java:
public static boolean compareIfSameLength(int [] a, int [] b) {
        return a.length == b.length;
}
 
Wenn du es etwas umschreibst, brauchst du es nicht neu deklarieren. Ich habs in deinem Code grad auskommentiert und an der neuen Stelle mit nem "XXX" markiert.
Grund is ganz einfach. Du hast ja
Code:
same
nur in deiner main-Methode deklariert und somit kann die Variable ja ausserhalb der main nicht bekannt sein.
Durch die kleine Änderung ist sie in der ganzen Klasse bekannt und kann überall genutzt werden 😉

Java:
public class HelloWorld 
{
    private static boolean same;    //XXX

    public static void main(String[] args) 
    {
    int [] a = {1, 2, 3, 4, 5};
    int [] b = {5, 6, 7, 3, 4, 9};
    
    boolean same = compareIfSameLength(a, b);
    add(same , a, b);
    }
    
    public static boolean compareIfSameLength(int [] a, int [] b) {
        
        //boolean same;
        
        if (a.length == b.length)
            same = true;
        else
            same = false;
        
        return same;
             }
 
................

[EDIT]Das beantwortet natürlich nur deine Frage. Die schönste Lösung dafür siehst du bei meinem Vorposter, dann reicht die lokale Variable in der main komplett aus[/EDIT]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben