2017-04-05 2 views
0

Anfänger Programmierer hier, ich habe derzeit ein Programm geschrieben, die ein Array und eine Variable und vergleicht die beiden, wenn die Variable deklariert innerhalb des Arrays ist, wird das Array alle Zahlen ausgedruckt innerhalb des Arrays neben der Zahl in der Variablen enthalten. Dies funktioniert und funktioniert ordnungsgemäß. Außerdem möchte ich jetzt den Code, den ich geschrieben habe, nehmen und in eine funktionierende Methode zur Wiederverwendung bringen, aber ich bin gerade dabei, das zu tun. Das Endergebnis wäre die Anzeige eines neuen kleineren Arrays, das die Nummer 17 nicht mehr enthält. Hier ist mein Codebeispiel.Array im Vergleich zu einem variablen Methodenaufruf

public class arrayTest 
{ 
    public static void main(String [] args) 
    { 
     int[]arrayA = {2,4,8,19,32,17,17,18,25,17}; 

     int varB = 17; 

     for(int B = 0; B < arrayA.length; B++) 
     { 
     if(arrayA[B] != varB) 
     { 
      System.out.print(arrayA[B] + " "); 
     } 

     } 
    } 

     public static int newSmallerArray(int[] A, int b) 
     { 

     } 
} 
+0

Warum haben Sie einen Rückgabetyp von int? sollte es nicht einfach so gedruckt werden wie bei der Hauptmethode? Mit anderen Worten, ein Rückgabetyp von void wäre geeignet oder würde ein Array zurückgeben. –

+1

Möchten Sie das kleinere Array zurückgeben oder nur ausdrucken? Auch Ihre IDE hat eine Refactor-Option, um "Methode extrahieren", wahrscheinlich –

+0

Bitte beziehen Sie sich auf diesen Beitrag [link] (http://stackoverflow.com/questions/5098540/delete-element-from-array) Es ist das gleiche wie Ihre Frage. –

Antwort

0

Refactorieren Sie einfach Ihren Code, der die Hauptlogik enthält, und verschieben Sie ihn in die Methode. Es wäre leicht mit einer IDE zu tun. Andernfalls müssen Sie den Code in eine neue Methode kopieren und die erforderlichen Argumente übergeben.

public class arrayTest 
{ 
    public static void main(String [] args) 
    { 
     int[] arrayA = {2,4,8,19,32,17,17,18,25,17}; 
     int varB = 17; 
     // Call with the array and variable you need to find. 
     newSmallerArray(arrayA, varB); 
    } 

    public static void newSmallerArray(int[] arrayA, int varB) 
    { 
     for(int B = 0; B < arrayA.length; B++) 
     { 
     if(arrayA[B] != varB) 
     { 
      System.out.print(arrayA[B] + " "); 
     } 
     } 
    } 
} 
+0

Wie @ scary-wombat vorgeschlagen wurde, musst du den Java-Namenskonventionen folgen. – prasanth

2

Ok, an dieser Stelle

int[]arrayA = {2,4,8,19,32,17,17,18,25,17}; 
    int varB = 17; 

können Sie

newSmallerArray(arrayA, varB); 

rufen und dann bei diesem Verfahren würden Sie den gleichen Looping-Code haben, aber die Variablen haben Namen geändert

for(int B = 0; B < A.length; B++) 
    { 
    if(A[B] != b) 
    { 
     System.out.print(A[B] + " "); 
    } 
    } 

jetzt die troubl e ist, haben Sie diese Methode deklariert als ein int Rückkehr aber es gibt nichts so vielleicht zurückkehren nichtig

public static void newSmallerArray(int[] A, int b) 

ich Java Namenskonventionen auch bleiben würde

Vollcodebeispiel nächste Rückkehr machen Rückkehr eine Teilmenge des Eingangs-Array

bessere Namen

public static void main(String[] args) throws SocketException { 

    int[]arrayA = {2,4,8,19,32,17,17,18,25,17}; 
    int varB = 17; 

    int [] na = newSmallerArray(arrayA, varB); 
    // test 
    System.out.println(); 
    for(int b = 0; na != null && b < na.length; b++) 
    { 
     System.out.print(na[b] + " "); 
    }   
} 

private static int[] newSmallerArray(int[] a, int b) { 

    int count = 0; 
    for(int x = 0; x < a.length; x++) 
    { 
     if(a[x] != b) 
     { 
      System.out.print(a[x] + " "); 
      count++; 
     } 
    } 

    if (count > 0) { 
     int[] newArray = new int [count]; 
     count = 0; 
     for(int x = 0; x < a.length; x++) 
     { 
      if(a[x] != b) 
      { 
       newArray[count++] = a[x]; 
      } 
     }   

     return newArray; 
    } 

    return null; 

} 
Verwendung 10
+0

Ich möchte, dass es das Array ohne 17 im Array zurückgibt – Clark1776

+0

@ Clark1776 Sie müssen Ihren Beitrag mit dem Kommentar aktualisieren, den Sie gerade geschrieben haben. –

+0

sehe meine bearbeitete Antwort –

1

ich mag es das Array ohne 17 im Array zurück Dann mehr

, vorausgesetzt, Sie Java 8+ verwenden, ein IntStream und filter aus b Werten verwenden. Wie,

public static int[] newSmallerArray(int[] arr, int b) { 
    return IntStream.of(arr).filter(x -> x != b).toArray(); 
} 

Wenn Sie es ohne Java 8-Funktionen tun möchten, können Sie die Vorkommen des Wertes zählen auszuschließen. Wie,

private static int countValue(int[] arr, int b) { 
    int count = 0; 
    for (int value : arr) { 
     if (value == b) { 
      count++; 
     } 
    } 
    return count; 
} 

Und verwenden Sie das, um ein neues Array korrekt Größe, und kopieren Sie dann die Werte. Wie,

public static int[] newSmallerArray(int[] arr, int b) { 
    int[] ret = new int[arr.length - countValue(arr, b)]; 
    for (int i = 0, p = 0; i < arr.length; i++) { 
     if (arr[i] != b) { 
      ret[p++] = arr[i]; 
     } 
    } 
    return ret; 
} 
Verwandte Themen