Varför min javakod visar warning.. missing return statement??

Permalänk

Varför min javakod visar warning.. missing return statement??

#16124061
Den var min först fråga, men svar hjälpte inte mig T_T
Så jag har ändrat lite koden..
men det fortfarande visar error

class listorA_{ public int num; public listorA_(int värde){ int num = värde; } public boolean ärSorterat (LinkedList<Integer> l){ Integer prev = null; for(Integer num : l) { prev = 1; if(prev != null && prev > num) return false; else{ return true; } } } ///// Här visar warning.. missing return statement }

Som du kan se i koden jag har returnerat både false och true men programm visar missing return statement
Jag har provat att öppna och stänga alla { och } men de fungerade inte.

Permalänk
Medlem

@ProgrammeringElev:

Du har lagt båda returnfunktionerna i en for-loop. Dvs. det är inte garanterat att något kommer returneras.

Visa signatur

MAIN: AMD Ryzen 1700x@4GHz | ASUS PRIME B350-PLUS | Corsair 16GB | Gainward GTX 1070 | Qnix QX2710 115Hz
SRV1-4: 2x Intel Xeon E5-2660 | 16GB ECC | CentOS 7
SRV5: 2x Intel Xeon E5620 | 240GB ECC | CentOS 7

"I can show you a real Tunnel Snake, Amata."

Permalänk
Skrivet av Windisch:

@ProgrammeringElev:

Du har lagt båda returnfunktionerna i en for-loop. Dvs. det är inte garanterat att något kommer returneras.

Går det inte bra om man lägger två returnfunktionerna i en for-loop?

Permalänk
Medlem

I framtiden, lägg din kod mellan [​​code][/code] så bevaras formateringen. Det blir mycket lättare att läsa kod då. D.v.s. så här:

class listorA_ { public int num; public listorA_(int värde) { int num = värde; } public boolean ärSorterat(LinkedList<Integer> l) { Integer prev = null; for(Integer num : l) { prev = 1; if(prev != null && prev > num) { return false; } else { return true; } } } ///// Här visar warning.. missing return statement }

Skrivet av ProgrammeringElev:

Går det inte bra om man lägger två returnfunktionerna i en for-loop?

Vad returnerar funktionen om listan l är tom?

Permalänk
Skrivet av perost:

I framtiden, lägg din kod mellan [​​code][/code] så bevaras formateringen. Det blir mycket lättare att läsa kod då. D.v.s. så här:

class listorA_ { public int num; public listorA_(int värde) { int num = värde; } public boolean ärSorterat(LinkedList<Integer> l) { Integer prev = null; for(Integer num : l) { prev = 1; if(prev != null && prev > num) { return false; } else { return true; } } } ///// Här visar warning.. missing return statement }

Aha Tack!! Jag har registrerat nyligen så jag vet inte så mycket om funktionerna som sweclockers har

Permalänk
Medlem
Skrivet av ProgrammeringElev:

Går det inte bra om man lägger två returnfunktionerna i en for-loop?

Vilken väg tar koden om listan är tom?

Edit: för sent...

Permalänk
Skrivet av perost:

I framtiden, lägg din kod mellan [​​code][/code] så bevaras formateringen. Det blir mycket lättare att läsa kod då. D.v.s. så här:

class listorA_ { public int num; public listorA_(int värde) { int num = värde; } public boolean ärSorterat(LinkedList<Integer> l) { Integer prev = null; for(Integer num : l) { prev = 1; if(prev != null && prev > num) { return false; } else { return true; } } } ///// Här visar warning.. missing return statement }

Vad returnerar funktionen om listan l är tom?

Uppgiften är
public static boolean ärSorterat(LinkedList<Double> l)
som returnerar true eller false beroende på om listan är sorterad eller inte.
I main-metoden ska inläsning till listan göras samt anrop till metoden ärSorterat och utskrift om listan är sorterat eller inte.

Men han sade det är ok om jag gör Integer

Exempel som vi gjorde i klassen var så

public class Inlämning_test { public static void main(String[] args) { System.out.println("Skriv in några decimaltal till listan, avsluta med \\n;"); Scanner sc = new Scanner(System.in); LinkedList<Integer> I = new LinkedList<Integer>(); while(sc.hasNextInt()) I.add(sc.nextInt()); System.out.print("Talen är"); for(Integer tal: I){ if(I.contains(tal)) System.out.print(tal + " "); } System.out.flush(); } }

Först tänkte att jag ska använda boolean som instansmetod.. och jag fick svar att jag ska göra så

public static boolean ärSorterat(LinkedList<Integer> l) Integer prev = null; // Anta 1-99 sortering, stigande for(Integer num : l) { if(prev != null && prev > num) { return false; } prev = l; } return true;

Det funkade inte och annat svar som jag har fått jag förstod inte #16124061

Permalänk
Skrivet av Dalton Sleeper:

Vilken väg tar koden om listan är tom?

Edit: för sent...

Jag tror du kan kolla under
Jag har skirivit alla informationer som jag vet

Permalänk
Medlem
Skrivet av ProgrammeringElev:

Jag tror du kan kolla under
Jag har skirivit alla informationer som jag vet

Vi frågade inte vad instruktionerna sa att funktionen ska returnera, utan vad din funktion just nu returnerar om listan är tom. Svaret är att din funktion just nu inte returnerar någonting när listan är tom (for-loopen körs inte då), vilket är orsaken till att kompilatorn ger en varning.

Permalänk
Skrivet av perost:

Vi frågade inte vad instruktionerna sa att funktionen ska returnera, utan vad din funktion just nu returnerar om listan är tom. Svaret är att din funktion just nu inte returnerar någonting när listan är tom (for-loopen körs inte då), vilket är orsaken till att kompilatorn ger en varning.

Aha! Den kapitel som jag läser nu är listor
Så jag vill returnera om talet som har jag skrivit är mindre än föregående tal, boolean ska returnera false

Jag menar om vi gör så:
3
4
5
6
boolean ska returnera true

men om jag gör så:
3
4
5
2
boolean ska returnera false

Permalänk
Medlem
Skrivet av ProgrammeringElev:

Jag menar om vi gör så:
...
boolean ska returnera true

men om jag gör så:
...
boolean ska returnera false

och det tredje fallet?

Permalänk
Skrivet av Dalton Sleeper:

och det tredje fallet?

Förlåt, Jag har inte förstått vilket tredje fall menar du
Jag har tänkt om bara dessa två ..

Permalänk
Medlem
Skrivet av ProgrammeringElev:

Förlåt, Jag har inte förstått vilket tredje fall menar du
Jag har tänkt om bara dessa två ..

Som vi nämnt ovan så kan listan vara tom, läs funktionen uppifrån och ner, tänk dig att du inte har några element alls i listan, vart hamnar du då?

Edit: det ser ut som du behandlar det i din ärSorterat ovan, frågan är om du förstår varför det ser ut som det gör.

public static boolean ärSorterat(LinkedList<Integer> l) { ... return true; }

Permalänk
Skrivet av Dalton Sleeper:

Som vi nämnt ovan så kan listan vara tom, läs funktionen uppifrån och ner, tänk dig att du inte har några element alls i listan, vart hamnar du då?

Edit: det ser ut som du behandlar det i din ärSorterat ovan, frågan är om du förstår varför det ser ut som det gör.

public static boolean ärSorterat(LinkedList<Integer> l) { ... return true; }

Den kod var en svar från min annan tråd
Jag vet inte själv vad det exakt betyder
Kanske på grund av inte repetera Linkedlist en gång till?
Jag förstår ingenting om listor...
Jag fick godkänt på alla prov och föregående kapitel arv det var super lätt
Men listor ej..

Permalänk
Medlem

@ProgrammeringElev: Det har egentligen inte med listor att göra, utan att innehållet i for-loopen aldrig kommer att köras, dvs exekveringen fortsätter efter loopen och där returneras ingenting, vilket var vad din kompilator klagade på.

Permalänk
Medlem

Innan for-loopen, lägg till 'if listan == null, return false'.

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Permalänk
Medlem

Varför ens ha en for-loop om du returnerar efter första elementet i den? Det är feltänk.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av talonmas:

Innan for-loopen, lägg till 'if listan == null, return false'.

Den kan fortfarande vara skapad och tom på samma gång