7 svar
116 visningar
sampledragon5 497
Postad: 26 nov 2021 17:58

Address

Hej! i min main metod kan ni se att jag vill printa min array. I min log7 metod kan ni se att den returnerar adressen som min array refererar till. Jag vill såklart inte printa adressen utan jag vill printa min array ( som man kan se i min main metod består av siffrorna 1,2,3,4,5,6. Jag vill printa  arrayen i denna formatet: [1,2,3,4,5,6] utan att behöva modifiera min return type.. Hur gör jag detta? Min source code: 

 

public class Main{

public int[] log7 (int [] numbers) {

return numbers;

}

public static void main(String[] args) {
Main obj = new Main();
int [] array = {1,2,3,4,5,6};
System.out.println(obj.log7(array));
  }
 
}

       

Programmeraren 3390
Postad: 26 nov 2021 18:16 Redigerad: 26 nov 2021 18:20

Ska du göra något i log7() med array:ens innehåll (med värdena)? Nu returnerar den samma sak som den får in, den gör alltså ingenting.

Vill du göra en snygg print så skapar du en separat print-metod med t ex en for-loop som loopar igenom och skriver ut alla tal i arrayen.

System.out.println(Object x) kör toString() på x och skriver ut strängen. Men toString() för en rå array är som du konstaterat en ful minnesreferens. Däremot har List-implementationerna snyggare toString() så om du inte vill skapa en separat print-metod kan du skiva så här:

import java.util.Arrays;

System.out.println(Arrays.asList(array));   // din array i main
System.out.println(Arrays.asList(log7(array)));  // den array som log7 returnerar

Om du inte är nöjd med utseendet skriver du din egen print-metod, nåt i stil med"void print(int[] arr)".
(Eller "String toString(int[] arr)" vars returvärde du använder i System.out.println() )

sampledragon5 497
Postad: 26 nov 2021 18:33

 

Om jag har en array som ser ut såhär: int[] array = {1,2,3,4,5,6}; så vill jag skapa en metod som returnerar min array med formatet [1,2,3,4,5,6] 

Jag vill alltså inte se detta i min terminal då jag kompilerar min kod;

1

2

3

4

5

6

Jag vill inte att min terminal ska visa arrayen på den viset utan jag vill att terminalen ska printa [1,2,3,4,5,6]. Jag vill även att min metod ska se ut såhär;                                               public int[] log7( int[] numbers) {

//block of code

}

toString metoden retunerar en String men i och med att min metod retunerar en int array så kan jag inte använda mig utav toString metoden? Har du några tips på hur jag kan få min terminal att printa arrayen på detta viset [1,2,3,4,5,6] ? Tack för att du faktiskt försöker hjälpa till! 

Programmeraren 3390
Postad: 26 nov 2021 18:50 Redigerad: 26 nov 2021 19:08

Testa först som jag skrev med Arrays.toList(numbers), den har skapligt snygg toString():
System.out.println(Arrays.asList(log7(numbers)))

Om du inte gillar den så gör du en metod som tar en int[] som argument och skriver ut, typ:

public static void print(int[] arr) {      // EDIT: static so it can be called from main
	System.out.print("[");
	for (int i = 0;  i < arr.length;  i++) {
		System.out.print(arr[i]);
		if (i + 1 < arr.length)
			System.out.print(",");

	}
	System.out.println("]");
}

Och sen i main gör du

print(log7(array));
Programmeraren 3390
Postad: 26 nov 2021 19:08 Redigerad: 26 nov 2021 19:09

Vill du göra samma men få det som en string använder du StringBuffer och append istället:

public static String toString(int[] arr) {
    StringBuffer buf = new StringBuffer();
    buf.append("[");
    for (int i = 0;  i < arr.length;  i++) {
        buf.append(arr[i]);
        if (i + 1 < arr.length)
            buf.append(",");
    }
    buf.append("]");
    return buf.toString();
}

Och i main

System.out.println(toString(log7(array)));
sampledragon5 497
Postad: 26 nov 2021 19:36
Programmeraren skrev:

Testa först som jag skrev med Arrays.toList(numbers), den har skapligt snygg toString():
System.out.println(Arrays.asList(log7(numbers)))

Om du inte gillar den så gör du en metod som tar en int[] som argument och skriver ut, typ:

public static void print(int[] arr) {      // EDIT: static so it can be called from main
	System.out.print("[");
	for (int i = 0;  i < arr.length;  i++) {
		System.out.print(arr[i]);
		if (i + 1 < arr.length)
			System.out.print(",");

	}
	System.out.println("]");
}

Och sen i main gör du

print(log7(array));

Jätte fiffig lösning  måste jag ändå medge! går det att att använda sig utav denna metoden om the return type skulle vara en int array? för jag märker att varje int array jag retunerar blir till en address? 

Programmeraren 3390
Postad: 26 nov 2021 19:49 Redigerad: 26 nov 2021 19:50

Berätta gärna med om vad det är du försöker göra. Generellt är det bra om en metod gör en sak och inte flera.
Verkar inte som en bra idé att ha en metod för att skriva ut något om returnerar int[]. Bättre att ha "void print()" för utskrift och separata metoder för varje annan sak du vill göra.

Om du absolut vill att print() ska returnera int[] är det bara att deklarera den så och i slutet returnera in-parametern. Men det är svårt att se när det skulle vara en bra idé:

public static int[] print(int[] arr) {
   // ... all the code from above
   return arr;
}

En int[] är också ett Object precis som allt annat (utom primitiver) men har som sagt en ful toString() (jag antar att det är det du menar med "blir en adress"). En ren int[] kan aldrig ha en snygg toString(). 
Om du vill göra det mer objekt-orienterat så kan du skapa en klass "IntArray" som har en int[] som intern variabel och dessutom implementerar toString(). Då får du ett objekt som du kan ge direkt to System.out.println() ungefär som dig ursprungsprogram såg ut i frågan.

Programmeraren 3390
Postad: 26 nov 2021 19:58 Redigerad: 26 nov 2021 20:01

Om du vill "wrappa" din int[] i en klass kan det se ut så här (indragen blev lite konstiga men orkar inte fixa, om du gör copy/paste fixar din editor det):

public class IntArray {
    int[] _arr;
    
    public IntArray(int[] arr) {
        set(arr);
    }

    public int[] get() {
        return _arr;
    }
    
    public void set(int[] arr) {
        _arr = arr;
    }
    
    public String toString() {
        return toString(get());
    }
    
    public static String toString(int[] arr) {
        StringBuffer buf = new StringBuffer();
	buf.append("[");
	for (int i = 0;  i < arr.length;  i++) {
            buf.append(arr[i]);
            if (i + 1 < arr.length)
                buf.append(",");
	}
	buf.append("]");
        return buf.toString();
    }

}

Och i main:

IntArray array = new IntArray(new int[]{1,2,3,4,5,6});
System.out.println(array);
Svara
Close