Fehlersuche bzgl. Array-Keys

Psynox

Mitglied
Folgender Code:

Java:
public class CharArrayOps {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
			int[] input_arr = new int[100];
			int i = 0;
			boolean eingabe = true;

			System.out.println("Bitte geben sie eine Testzeile ein:");
			
			while (eingabe == true) {
				input_arr[i] = System.in.read();
				switch (input_arr[i]) {
				case 13: eingabe = false;
				default: i++;;
				}
			}
			System.out.println("input_arr hat " + (input_arr.length) + "Keys");
			contains(input_arr);
	}
	
	public static void contains(int[] arr) {
		int i = 0;
		boolean transfer  = true;
		while (transfer == true) {
			switch (arr[i]) {
			case 13: transfer = false;
			default: i++;
			}
		}
		int[] new_arr = new int[i-1];
		new_arr = arr;
		System.out.println("new_arr hat " + (i-1) + "Keys");
		output(new_arr);
	}
	
	public static void output(final int[]printed_arr) {
		System.out.println("printed_arr hat " + printed_arr.length + "Keys");
		for (int i=0; i<printed_arr.length; i++)
            System.out.print((char)printed_arr[i]);
        System.out.println();
	}
}

erzeugt folgende Ausgabe:

Bitte geben sie eine Testzeile ein:
jk
input_arr hat 100Keys
new_arr hat 2Keys
printed_arr hat 100Keys
jk

So nun zu meinem Problem. Ich schätze der Code an und für sich ist selbsterklärend, darum möchte ich auch nicht weiter drauf eingehen wofür er da ist und was er tun soll.

Mein Problem ist das 'printed_arr' in der function 'output' 98Keys zuviel hat. Ich habe ein wenig rumgespielt und es hat sich herausgestellt das printed_arr immer genauso viele Keys hat wie input_arr. Die Frage wieso hat dieser 100 wenn er aber über den Parameter einen Array mit 2 Keys übermittelt bekommt?

Ich hoffe ich bin hier richtig und ihr könnt mich auf den Fehler aufmerksam machen. Den ich sitze schon seit längeren an diesem Problem und weiß leider nicht woran es liegt.

In der Hoffnung auf schnelle Hilfe

Psynox
 
So ok hab versucht aus dem was du schriebst was herauszufinden und ich habe zwar keine Lösung für mein aktuelles Problem gefundne doch weiß ich jetzt was du meinst. Die Frage ist jetzt nur wie löse ich das am elegantesten mit "Anfänger"-Methoden?
 
So ok ich habe das Problem gelöst.
Statt new_arr = arr; (new_arr wird zu referenz von arr, dadurch auch gleiche eigenschaften) habe ich eine for-Schleife eingebaut. Ist zwar nicht elegant aber es funktioniert fürs erste.

Danke nochmal an sicLotus für den spärlichen, aber doch hilfreichen Ansatz.


Lösung meines Problems:
Java:
public class CharArrayOps {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
			int[] input_arr = new int[100];
			int i = 0;
			boolean eingabe = true;

			System.out.println("Bitte geben sie eine Testzeile ein:");
			
			while (eingabe == true) {
				input_arr[i] = System.in.read();
				switch (input_arr[i]) {
				case 13: eingabe = false;
				default: i++;;
				}
			}
			System.out.println("input_arr hat " + (input_arr.length) + "Keys");
			contains(input_arr);
	}
	
	public static void contains(int[] arr) {
		int i = 0;
		boolean transfer  = true;
		while (transfer == true) {
			switch (arr[i]) {
				case 13: transfer = false;
				default: i++;
			}
		}
		int[] new_arr = new int[i-1];
		
		for (int j=0; j<(i-1); j++) {
			new_arr[j] = arr[j];
		}
		
		System.out.println("new_arr hat " + new_arr.length + "Keys");
		output(new_arr);
	}
	
	public static void output(final int[] printed_arr) {
		System.out.println("printed_arr hat " + printed_arr.length + "Keys");
		for (int i=0; i<printed_arr.length; i++)
            System.out.print((char)printed_arr[i]);
        System.out.println();
	}
}
 
Dein ganzes Programm ist - mit Verlaub gesagt - ziemlich sinnlos.

Wenn du eine Zeile einlesen willst, geht das so:
Java:
import java.util.Scanner;
...
Scanner sc = new Scanner(System.in);
String line = sc.getNextLine();

Willst du das in einem Array mit passender Größe, geht das so:
Java:
char[] array = line.toCharArray();

Falls es für das ganze Herumkopieren keinen wirklich guten Grund gibt, hast du da eine hübsche Rube-Goldberg-Maschine gebaut...
 
@Psynox

Sparlich wars, das stimmt, aber so hast du glaube ich am meisten davon gelernt und noch viel wichtiger, es auch verstanden 🙂

*THUMBSUP* das du dein Problem alleine lösen konntest 🙂

Dabei würd ich dir den Tipp geben so schnell wie möglich von den Klassenmembern wegzukommen und langsam in Richtung OOP hinzuarbeiten 🙂
 

Neue Themen


Zurück
Oben