/ / Rückgabe mehrerer Array-Werte aus Schleife - Java, Android, Arrays, For-Loop, Return

Rückgabe mehrerer Array-Werte aus der Schleife - Java, Android, Arrays, for-Schleife, zurück

Ich habe eine Aktivität in meiner App, die eineSuchbegriff und gibt Dateinamen zurück, die diesen Suchbegriff enthalten. Ich versuche, diesen Code so zu ändern, dass er einen Suchbegriff aufteilen und Dateien anzeigen kann, die einen der Suchbegriffe enthalten. Wenn der Suchbegriff beispielsweise "big dog" ist, werden Dateien zurückgegeben, die im Titel "big" enthalten, und auch Dateien, die im Titel "dog" enthalten.

Der Teil des Codes ist:

 if (f.isDirectory()){

return true; // Don"t discard any subdirectories
}

else {


String delimiter = " +";  /* delimiter */
searchname.searchname = searchname.searchname.toUpperCase();

//Split the search string
String [] tempname = searchname.searchname.split(delimiter);
//Array for the file names to be stored
boolean[] namestring = new boolean[tempname.length];
//Counter
int count;
count = 0;

for(int i=0; i<tempname.length; i++)
{
//While i is less than tempname size store filename to namestring array
namestring[i] = name.toUpperCase().contains(tempname[i]);
//Add one to count
count = +1;
//Once count = tempname length you can return all of the array values
if (count == tempname.length){
return namestring[i];
}
}

}
return false;

Mein Java ist ziemlich einfach und ich könnte etwas sehr offensichtliches vermissen.

Vielen Dank für Ihre Hilfe


Vielen Dank für Ihre schnellen Antworten.

Ich glaube, ich verstehe, was Sie alle sagen. Ich habe meinen Code geändert, um Folgendes anzuzeigen:

public boolean accept(File dir, String name) {

File f = new File(dir, name); // Form the file path "dir/name".

String delimiter = " ";  /* delimiter */
searchname.searchname = searchname.searchname.toUpperCase();

//Split the search string//
String [] tempname = searchname.searchname.split(delimiter);

//Array of Booleans
ArrayList<Boolean> matches = new ArrayList<Boolean>();

if (f.isDirectory()){

return true; // Don"t discard any subdirectories
}

else {


for(int i=0; i<tempname.length; i++)
{

// Toast.makeText(getApplicationContext(), (tempname[i]), Toast.LENGTH_SHORT).show();
matches.add(name.toUpperCase().contains(tempname[i]));
}

}

return matches;

}});

In Eclipse wird jedoch "return match" angezeigt. wieFehler "Typenkonflikt: Umwandlung von ArrayList in Boolean nicht möglich". Wenn ich die vorgeschlagenen Änderungen vornehme, werden Fehler im Teil "public boolean accept (File dir, String name) {" angezeigt. Irgendwelche Vorschläge?

Antworten:

0 für die Antwort № 1

Die Funktion sollte bei ihrer Definition boolean zurückgeben: public boolean accept (Dateiverzeichnis, Stringname) Sie geben jedoch ArrayList zurück.

Das ist wahrscheinlich das, was du willst:

public boolean accept(File dir, String name) {
File f = new File(dir, name); // Form the file path "dir/name".
String delimiter = " ";  /* delimiter */
searchname.searchname = searchname.searchname.toUpperCase();

//Split the search string//
String [] tempname = searchname.searchname.split(delimiter);

if (f.isDirectory()){
return true; // Don"t discard any subdirectories
} else {
for(int i=0; i<tempname.length; i++){
// Toast.makeText(getApplicationContext(), (tempname[i]), Toast.LENGTH_SHORT).show();
if(name.toUpperCase().contains(tempname[i])) {
return true;
}
}
}

return false;
}

4 für die Antwort № 2

Nun, eine Sache, die Sie verpasst haben, ist

count = +1;

in deiner for-Schleife. Es sollte sein

cout++;

oder

cout = count+1;

0 für die Antwort № 3

Beachten Sie, dass return namestring[i] gibt nur einen Wert zurück (und wie erwähnt wird nicht erreicht). Um alle Array-Werte zurückzugeben, müssen Sie die Methode als zurückgegebenes Array deklarieren und dann einfach das Array zurückgeben namestring d

public boolean[] yourMethod()
{
boolean[] namestring = ....
//Your code
return namestring;
}

Ich denke du solltest einen benutzen List Für Ihren Rückgabetyp implementieren Sie in Ihrer Methode ein Arraylist von Strings (oder Booleans, wenn Sie möchten). Dies hat den Vorteil, dass Sie über eine dynamische Größe verfügen, d. H., Wenn Ihr Suchbegriff vorhanden ist "Big dog" Wenn Sie 20 Dateien haben, von denen 5 übereinstimmen, enthält das Array, das Sie erstellen, nur 2 Elemente. Wenn Sie es als Liste ausführen, wird es dynamisch wachsen, wenn Sie weitere hinzufügen.

Inistialise:

List<String> matches = new ArrayList<String>();

Wenn Sie dann eine Übereinstimmung in Ihrer Schleife finden (Pseudocode):

 //For each file name
// For each search term
// If name contains search term
// Add to list
matches.add(name)   // Actual code to add to list.

Dann kehren Sie die Liste zurück

return matches;

0 für die Antwort № 4

Bemerkungen:

  1. count = +1 sollte count + = 1 sein
  2. Wenn Sie nach Ende der Schleife zurückkehren möchten, brauchen Sie nicht zu zählen. Setzen Sie den Rückgabesatz einfach außerhalb der Schleife
  3. Sie möchten das Array wie in Ihren Kommentaren zurückgeben, aber Sie geben nur einen booleschen Wert und immer den letzten zurück
  4. es scheint, dass Sie das Array nicht als Sie zurückgeben müssenSie müssen nur feststellen, ob der Dateiname einen der Begriffe enthält. Sie können nur dann "true" zurückgeben, wenn ein geteiltes Array im Dateinamen enthalten ist.
  5. Ihr Code verwendet "+" als Trennzeichen, aber Sie haben "big dog" als Beispiel genannt, dessen Trennzeichen "" ist.
  6. Versuchen Sie, mit diesem Debugging oder Protokollierungsproblem zu behandeln, um zu analysieren, welcher Teil nicht wie erwartet funktioniert