StringArray i dodawanie, wyrzucanie i wypisywanie imion

0

Witam, dopiero zaczynam swoja przygode z programowaniem. Chcialem napisac prosty program z StringArray: dodawanie/wyrzucanie/ wypisywanie imion. Problem zaczal mi sie gdy chcialem napisac metode przeszukujaca moje ArrayList na podstawie wpisanego stringu. Napisalem krotka metode sprawdzajaca:

 public boolean test(String name1, String x) {
	boolean check = x.contains(name1);
	return check;
	}

Oraz petle przeszukujaca kazde imie w Array List:

case 5: {
				System.out.println("Enter a String");
				String name1 = ioHilfe.Basisprogramm.readString();
				for (String x : Table2)
				if	(ref.test(name1, x) == true){//metoda sprawdzajaca string
					System.out.println(x);
				}
else{System.out.println("blablabla");
}
				break;

			} 

Pozadany efekt to: Jesli metoda znajdzie string w imieniu to consola ma wypisac: "Exist!" i wypisac wszystkie imiona posiadajace String, jesli nie znajdzie ma napisac ze zadne imie nie posiada takiego stringu.Wszystko dziala w miare ok tylko slowa "exist!" oraz "blablabla" sa wypisywane dla kazdego imienia w tablicy a ja chcialbym zeby byly wypisywane tylko raz. Pozdrawiam.

0
case 5: {
                System.out.println("Enter a String");
                String name1 = ioHilfe.Basisprogramm.readString();
                boolean found = false;
                for (String x : Table2)
                if (ref.test(name1, x)){//metoda sprawdzajaca string
                    found = true;
                }
                if(found){
                    System.out.println("exist!");
                }  
                else{
                    System.out.println("blablabla");
                }
                break;
0

No dobrze ale podany kod nie wypisuje imion w ktorych dany string zostal znaleziony.

1

Imo, bzdurne wymaganie. Wiadomo przecież jakie imię jest szukane. Można ewentualnie wypisać ile razy je znaleziono. Ale jak chcesz...

case 5: {
                System.out.println("Enter a String");
                String name1 = ioHilfe.Basisprogramm.readString();
                boolean found = false;
                String s = "";
                for (String x : Table2)
                if (ref.test(name1, x)){//metoda sprawdzajaca string
                    found = true;
                    s = s+" "+x; 
                }
                if(found){
                    System.out.println(x+" exist!");
                }  
                else{
                    System.out.println("blablabla");
                }
                break;
0

No wlasnie nie bzdurne bo wpisujac String np. "la" wypisze mi Ola, Ala, Alan etc. W podanym przez Ciebie kodzie

if(found){
    System.out.println(x+" exist!");

Zamienilem x na s i otrzymalem to co chialem! Bardzo dziekuje! ps. Czy String s mozna wypisac aby jedno imie bylo pod drugim a nie po spacji?

dodanie znacznika <code class="java"> - @furious programming

1

Można

s = s+"\n"+x;
0

Rzeczywiscie :) Dziekuje.
Ten sam przyklad, ale metoda indexOf:

public int index(String name) {
		int o = Table1.indexOf(name);
		return o;
	}
 

Mozna zrobic aby metoda zwracala index imienia a wielkosc znakow wprowadzonego Stringu name nie miala znaczenia?
Probowalem int o = Table1.toLowerCase().indexOf(name.toLowerCase()); ale metoda toLowerCase nie dziala z ArrayList

0

Nie rozumiem. Co ma zwrócić metoda gdy szukamy Stringa "x", a tablica Table1 wygląda tak: {"abcX","dexu","ixww"}?

0

Ma zwrócić 0,1,2

0

Jakim cudem można uzyskać odpowiedź 0,1,2? Rozumiałbym bym 3,2,1.

0

Patrz, miałem Array List z wpisanymi Ala, Ola, Ania, Ala, Aga . Metoda indexof(Ania) zwracała mi 2. Chce żeby zwracała mi 3 obojętne czy użytkownik wpisze Ania czy ania. Idealnie by było jakby do tego indexof (ala) zwracał mi 0 i 3.Ale to już nie takie ważne

1

To się kupy nie trzyma. Dlaczego dla ania ma zwrócić 3, a dla Ala 0 i 3?
Spróbuj tak (kod nie pasuje do Twojego opisu):

public ArrayList<Integer> indexes(String name) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        for(int i=0;i<Table1.size();i++)
        if(Table1.get(i).equalsIgnoreCase(name)){
            result.add(i);
        }    
        return result;
    }
1

Nie da się chyba w domyślnej metodzie indexOf wyszukać ignorując znaki. Może napisz własną klasę implementującą ArrayListę i przesłoń metodę indexOf. Mój przykład poniżej:

import java.util.ArrayList;
import java.util.List;

class MyList extends ArrayList<String> {

	@Override
	public int indexOf(Object object) {
		String word = (String) object;
		int index = 0;
		for(String str : this) {
			if(str.equalsIgnoreCase(word))
				return index;
			index++;
		}
		return -1;
	}
}

public class Glowna {

	public static void main(String[] args) {

		List<String> list = new MyList();
		list.add("abcd");
		list.add("efgh");
		list.add("ulon");
		System.out.println(list.indexOf("EFGH"));
		System.out.println(list.indexOf("ULON"));
		list.remove("efgh");
		System.out.println(list.indexOf("ULON"));
	}
} 

Można dodać jeszcze metodę, która zachowa się tak jak tego oczekujesz o ile dobrze Cię zrozumiałem. Czyli zwróci indeksy pod jakimi jest dany łańcuch znaków:

import java.util.ArrayList;
import java.util.List;

class MyList extends ArrayList<String> {

	@Override
	public int indexOf(Object object) {
		String word = (String) object;
		int index = 0;
		for(String str : this) {
			if(str.equalsIgnoreCase(word))
				return index;
			index++;
		}
		return -1;
	}
	
	public List<Integer> getIndex(String word) {
		int index = 0;
		List<Integer> indexList = new ArrayList<>();
		for(String str : this) {
			if(str.equalsIgnoreCase(word))
				indexList.add(index);
			index++;
		}
		return indexList;
	}
}

public class Glowna {

	public static void main(String[] args) {

		MyList list = new MyList();
		list.add("abcd");
		list.add("efgh");
		list.add("ulon");
		list.add("ulon");
		System.out.println(list.indexOf("EFGH"));
		System.out.println(list.indexOf("ULON"));
		list.remove("efgh");
		System.out.println(list.indexOf("ULON"));
		System.out.println(list.getIndex("ULON"));
		list.remove("abcd");
		System.out.println(list.getIndex("ULON"));
	}
} 
0

Troche jeszcze nie jestem na tym etapie. Poczytam troche i sprobuje . Dzieki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1