Abfrage ob Wert im Array liegt

Diskutiere Abfrage ob Wert im Array liegt im Hausaufgaben Bereich.
Kirby_Sike

Kirby_Sike

Gibt es eine Funktion um einen Wert mit einem Array zu vergleichen und zuschauen ob dieser im Array liegt? Es gibt so etwas ja für Strings mit indexOf welcher bei keiner Übereinstimmung ja den Wert -1 liefert. Gibt es so eine ähnliche Funktion auch für Arrays?

Ich liefer mal folgendes Beispiel:

Java:
int array [] = {1,2,3,4};
int input = 2
Ich hatte da an eine If Else gedacht, welche bei einer Übereinstimmung, also wenn es im Array bereits vorkommt mit einer Counter Variable Counter und wenn der Wert noch nicht im Array liegt ihn hineinspeichert.

Java:
if(input in array){
counter += i;
}else{
füge input zum array hinzu
}
 
Kirby_Sike

Kirby_Sike

Also ich glaube ich habe das einlesen der Zahlen für das Array etwas falsch gemacht hier mein Code:

Java:
import java.util.Scanner;
import java.util.Arrays;

public class Statistik {

    public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);
        System.out.println("Enter the Size of your Array: ");
        int numbersLong = sc.nextInt();
        int numbers [] = new int[numbersLong];
        int counter = 0;
         for(int i = 0;  i < numbers.length; i++) {
            System.out.println("Enter your Number, which you like to add to the Array: ");
             int inputForArray = sc.nextInt();
            
            if(Arrays.binarySearch(numbers,inputForArray) == 0) {
                counter += 1;
            }else {
                numbers[i] = inputForArray;
             }
        }
        sc.close();
        System.out.println(numbers);
        //System.out.println(counter);
    }

}
 
A

abc66

Java:
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		System.out.println("Enter the Size of your Array:");
		final int n = new Scanner(System.in).nextInt();
		int[] a = new int[n];
		int c = 0;
		for (int i = 0; i < n; i++) {
			System.out.println("Enter your Number, which you like to add to the Array:");
			int x = new Scanner(System.in).nextInt();
			if (Arrays.stream(a).filter(j -> j == x).findFirst().isPresent()) {
				System.out.println("Array already contains " + x + ".");
				c++;
				i--;
			} else {
				a[i] = x;
			}
		}
		System.out.println("The value of c is " + c + ".");
	}
Nur bei 0 musst aufpassen
 
Kirby_Sike

Kirby_Sike

Oh stimmt daran hatte ich nicht gedacht :) mal noch eine Frage, wenn ich jetzt für jede Zahl die doppelt eingegeben wird speichern möchte wie oft sie doppelt ist, wie mache ich dass, da ja die Größe des Arrays und die Anzahl der Zahlen frei wählbar sind, dann müsste ich ja eine Menge Variablen vorher definen oder gibt es da einen simpleren Weg?
 
A

abc66

Ja gibt es.... Aber ich würde einen objektorientierten Ansatz verfolgen dabei.
 
Kirby_Sike

Kirby_Sike

Also ich hatte die Idee die doppelten in ein separates Array zu speichern und dann die Zahlen welche doppelt im Array sind zu Zählen und auszugeben das Problem was ich nur habe ist erstmal die geforderte Formatierung und wie ich die 1 für die Zahlen ausgebe die nur 1 mal vorkommen. Ich schicke einfach ein Beispiel das mir gegeben wurde:

12651
 
Kirby_Sike

Kirby_Sike

Also ich habe es so probiert, das Problem was ich versuche zu lösen ist , dass er die doppelte Zahl ja nicht mit zählt da sie nicht ins Array gespeichert werden, jedoch wenn ich es so mache dass sie ins Array gespeichert werden, möchte ich nicht dass diese Eingabe als Eingabe gezählt wird. Ich hoffe du verstehst was ich versuche zu sagen :)

Java:
import java.util.Scanner;
import java.util.Arrays;

public class Statistik {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        System.out.println("Enter the Size of your Array:");
        final int n = new Scanner(System.in).nextInt();
        int[] numbers = new int[n];
        //int [] counter = new int[20];
        
        Arrays.sort(numbers);
        
        for (int i = 0; i < n; i++) {
            System.out.println("Enter your Number, which you like to add to the Array:");
            int inputToArray = new Scanner(System.in).nextInt();
            int c = 0;
            if (Arrays.stream(numbers).filter(j -> j == inputToArray).findFirst().isPresent()) {
                numbers[i] = inputToArray;
                //c += 1;
                i--;
            } else {
                numbers[i] = inputToArray;
                //c+= 1;
            }
        }
        System.out.println(Arrays.toString(numbers));
        int occurences = 1;
        
        for (int i = 0; i < numbers.length; i++) {
            if (i < numbers.length - 1) {
                if (numbers[i] == numbers[i + 1]) {
                    occurences++;
                }
            } else {
                System.out.println(numbers[i] + " occurs " + occurences
                        + " time(s)"); //end of array
            }

            if (i < numbers.length - 1 && numbers[i] != numbers[i + 1]) {
                System.out.println(numbers[i] + " occurs " + occurences
                        + " time(s)"); //moving to new element in array
                occurences = 1;
            }

        }
        //System.out.println("The value of c is " + c + ".");
        
        //System.out.println(Arrays.toString(numbers));
        //System.out.println(Arrays.toString(counter));
    }


}
 
D

dirk1970

am einfachsten wäre es eine List<Integer> zu nehmen, die hat eine Methode contains...

wäre dann ungefähr so:
System.out.println("Enter the Size of your Array:");
final int n = new Scanner(System.in).nextInt();
List<Integer>a=new ArrayList<>();
int c = 0;
int i=0;
while (i<n) {
System.out.println("Enter your Number, which you like to add to the Array:");
Integer x = new Integer(new Scanner(System.in).nextInt());
if (a.contains(x)) {
System.out.println("Array already contains " + x + ".");
c++;
} else {
a.add(x);
i++;
}
}
System.out.println("The value of c is " + c + ".");
 
Kirby_Sike

Kirby_Sike

Ja das stimmt, jedoch löst das trotzdem nicht das eigentliche Problem nicht
 
D

dirk1970

nicht? dann habe ich das Problem nicht verstanden,
ich dachte Du wolltest doppelte Eingaben finden
 
Kirby_Sike

Kirby_Sike

Naja das stimmt ja auch nur möchte ich gerne ausgeben wie oft die einzelnen Zahlen eingegeben wurden nicht nur wie oft generell eine Zahl doppelt eingegeben wurde
 
mihe7

mihe7

Ich gehe mal davon aus, dass Arrays verwendet werden müssen. Insofern würde ich empfehlen, das Problem auf zwei Arrays aufzuteilen:
a) ein Array mit bereits behandelten Zahlen (jede Zahl taucht nur einmal dort auf)
b) ein Array, das zu jeder behandelten Zahl die Anzahl enthält
 
D

dirk1970

ach so, dann ist Array nicht unbedingt die beste Wahl, ich würde an deiner Stelle eine Map verwenden key wäre von Typ Integer die eingegebene Zahl, Value auch Integer die Anzahl wie oft eingegeben

und der Code wäre im etwa so (bei Eingabe von -1 wird die Eingabe beendet, und derzeit mitgezählt, bei Bedarf kannst Du das ja wieder an Deine Bedürfnisse anpassen)

public static void main(String[] args) {
Map<Integer,Integer> eingaben=new HashMap<>();
Integer x=0;
while (!x.equals(-1)) {
System.out.println("Enter your Number, which you like to add to the Array:");
x = new Integer(new Scanner(System.in).nextInt());
Integer count = eingaben.get(x);
if(count==null) {
count=1;
}else {
count++;
}
eingaben.put(x, count);
}
for(Integer key:eingaben.keySet()) {
System.out.println("Wert: "+key+" Anzahl: "+eingaben.get(key));
}
}
 
Thema: 

Abfrage ob Wert im Array liegt

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben