Permalänk

Arraylist for loop

Jag försöker göra en for loop som skall skriva ut siffrorna 1-20 genom att använda en arraylist. Den kodsnutt som jag formulerat nedan fungarar inte riktigt som jag vill. Någon som kan hjälpa mig?

ArrayList<Integer> intList = new ArrayList<Integer>();
for (int i = 0; i <= 20; i++) {
System.out.println(intList.get(i));

Permalänk
Hedersmedlem

Har du fyllt din ArrayList med tal?

Försök beskriva mer vad som går fel.

Permalänk
Medlem

Du har en arraylist som är helt tom, när du skriver ut den så kommer ingenting för det finns inget där i. Antingen skriv ut i direkt eller lägg i inuti arraylisten och sen skriv ut

Visa signatur

För övrigt anser jag att Kartago bör förstöras

Permalänk

as

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add("1");
intList.add("2");
intList.add("3");
for (int i = 0; i <= 20; i++) {
System.out.println(intList.get(i));

Menar ni att jag ska göra sådär? Behöver jag lägga till från 1-20 manuellt? Vill helst inte göra det! Dock så får jag ett felmeddelande: The method add(Integer) in the type ArrayList<Integer> is not applicable for the arguments (String). Med det menar programmet .add kan inte användas med int? Vill bara skriva ut en lista med nummer från 1-20 i heltal..

Permalänk
Medlem
Skrivet av kungsporten:

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add("1");
intList.add("2");
intList.add("3");
for (int i = 0; i <= 20; i++) {
System.out.println(intList.get(i));

Menar ni att jag ska göra sådär? Behöver jag lägga till från 1-20 manuellt? Vill helst inte göra det! Dock så får jag ett felmeddelande: The method add(Integer) in the type ArrayList<Integer> is not applicable for the arguments (String). Med det menar programmet .add kan inte användas med int? Vill bara skriva ut en lista med nummer från 1-20 i heltal..

Du kan väl sätta den till {1,2,3,4,5,....,19,20} ? Men om den enbart är till för att skriva ut 1-20 är det väl onödigt att ha en arraylist?

Visa signatur

Corsair Obsidian 350D | ASUS Maximus V Gene | i5-3570k
Palit RTX3060 Dual OC | 4x4GB 1600Mhz Vengeance LP | 2x256GB SSB | TX950W | W10
Ducky Shine3 MX (Red Switches) | Mionix Naos 8200 | DT990+Schiit Modi2/Magni2

Permalänk
Skrivet av Pertanbus:

Du kan väl sätta den till {1,2,3,4,5,....,19,20} ? Men om den enbart är till för att skriva ut 1-20 är det väl onödigt att ha en arraylist?

Det är en övningsuppgift bara för att se hur det fungerar. Så jag behöver alltså skriva ut 1-20 eller finns det något smidigare sätt att göra detta på?

Permalänk
Skrivet av kungsporten:

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add("1");
intList.add("2");
intList.add("3");
for (int i = 0; i <= 20; i++) {
System.out.println(intList.get(i));

Menar ni att jag ska göra sådär? Behöver jag lägga till från 1-20 manuellt? Vill helst inte göra det! Dock så får jag ett felmeddelande: The method add(Integer) in the type ArrayList<Integer> is not applicable for the arguments (String). Med det menar programmet .add kan inte användas med int? Vill bara skriva ut en lista med nummer från 1-20 i heltal..

När du skriver intList.add("1"); så kommer du att försöka lägga till ett stringobjekt i listan. Ta bort "" runt siffrorna så kommer det gå bra. Om du inte vill lägga till alla 20 tal manuellt i listan kan du använda en for-sats för det också på följande vis:

for (int i = 1; i <= 20; i++) { intList.add(i); }

Du kan egentligen skippa att använda listan helt och skriva ut direkt i din for-sats likt nedan:

for (int i = 1; i <= 20; i++) { System.out.println(i); }

Du kommer även få ett IndexOutOfBound-exception om du kör for (int i = 0; i <= 20; i++) { ... } pga av du endast lagt in 20 tal i listan men går från 0-20 i for-satsen. Använd här istället i < intList.size() istället för i <= 20.

Permalänk
Skrivet av equals(null):

När du skriver intList.add("1"); så kommer du att försöka lägga till ett stringobjekt i listan. Ta bort "" runt siffrorna så kommer det gå bra. Om du inte vill lägga till alla 20 tal manuellt i listan kan du använda en for-sats för det också på följande vis:

for (int i = 1; i <= 20; i++) { intList.add(i); }

Du kan egentligen skippa att använda listan helt och skriva ut direkt i din for-sats likt nedan:

for (int i = 1; i <= 20; i++) { System.out.println(i); }

Du kommer även få ett IndexOutOfBound-exception om du kör for (int i = 0; i <= 20; i++) { ... } pga av du endast lagt in 20 tal i listan men går från 0-20 i for-satsen. Använd här istället i < intList.size() istället för i <= 20.

Nu fungerade det! Tack så jätte mycket!

Om jag nu vill använda en Iterator som skriver ut alla udda tal i listan hur gör jag det? Jag importerade "import java.util.Iterator;" och antar att jag skall använda en while sats av något slag? Vore ytterst tacksam för vidare instruktioner!

Permalänk
Medlem
Skrivet av kungsporten:

Nu fungerade det! Tack så jätte mycket!

Om jag nu vill använda en Iterator som skriver ut alla udda tal i listan hur gör jag det? Jag importerade "import java.util.Iterator;" och antar att jag skall använda en while sats av något slag? Vore ytterst tacksam för vidare instruktioner!

För ditt eget bästa bör du nog ta och läsa i kurslitteraturen eller ta och söka på egen hand för att försöka lösa uppgiften.
Om du sedan får problem efter att du försökt så kan du komma hit med problemet så hjälper vi dig nog gärna.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Skrivet av Gnejs:

För ditt eget bästa bör du nog ta och läsa i kurslitteraturen eller ta och söka på egen hand för att försöka lösa uppgiften.
Om du sedan får problem efter att du försökt så kan du komma hit med problemet så hjälper vi dig nog gärna.

Jag har ingen kurslitteratur, detta är random övningar för att jag vill lära mig själv. Men som sagt den övre listan fungerade som den ska. Jag lyckas dock inte få till det med att skriva ut de udda talen..

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
for (int i = 1; i <= 20; i++) {
intList.add(i);
System.out.println(intList.get(i));

Iterator<Integer> it = intList.iterator();
while (it.hasNext()) {
TestList i = it.next();
if(it.equals(1,3,5,7,9,11,13,15,17,19))
return it;
System.out.println(intList.get(i));

Permalänk
Medlem
Skrivet av kungsporten:

Jag har ingen kurslitteratur, detta är random övningar för att jag vill lära mig själv. Men som sagt den övre listan fungerade som den ska. Jag lyckas dock inte få till det med att skriva ut de udda talen..

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
for (int i = 1; i <= 20; i++) {
intList.add(i);
System.out.println(intList.get(i));

Iterator<Integer> it = intList.iterator();
while (it.hasNext()) {
TestList i = it.next();
if(it.equals(1,3,5,7,9,11,13,15,17,19))
return it;
System.out.println(intList.get(i));

return gör att du lämnar metoden. Det är nog inte vad du är ute efter
Sen om jag inte ser fel så har du lagt den nya koden i den gamla loopen också

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Skrivet av Gnejs:

return gör att du lämnar metoden. Det är nog inte vad du är ute efter
Sen om jag inte ser fel så har du lagt den nya koden i den gamla loopen också

Hmm okej tog bort return och satte en avslutande klammer bakom första loopen. Men hur kommer jag åt intList ifrån iterator då?

Permalänk
Medlem
Skrivet av kungsporten:

Hmm okej tog bort return och satte en avslutande klammer bakom första loopen. Men hur kommer jag åt intList ifrån iterator då?

Du kommer redan åt den som det är nu.
it.next(); kommer returnera en integer.
Så det du är ute efter är nog i stil med

Integer i = it.next(); if(i.equals(1,3,5,7,9,11,13,15,17,19)){ System.out.println(i); }

Dock tar inte Integer's equals() inte emot dina parametrar så det kommer inte funka
Använder du en IDE? Känns som om du borde fått väldigt mycket fel med denna koden.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Skrivet av kungsporten:

Jag har ingen kurslitteratur, detta är random övningar för att jag vill lära mig själv. Men som sagt den övre listan fungerade som den ska. Jag lyckas dock inte få till det med att skriva ut de udda talen..

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
for (int i = 1; i <= 20; i++) {
intList.add(i);
System.out.println(intList.get(i));

Iterator<Integer> it = intList.iterator();
while (it.hasNext()) {
TestList i = it.next();
if(it.equals(1,3,5,7,9,11,13,15,17,19))
return it;
System.out.println(intList.get(i));

Måste du använda en iterator då? Du kan ju lika bra kolla om talet är udda i din for-sats, om så är fallet skriver du ut talet ur listan på index i.

Permalänk
Medlem

Varför inte använda en förenklad for-loop? Klart snyggast.
Nedanstående loopar igenom hela listan, så du slipper bry dig om hur stor den är o.s.v..

ArrayList<Integer> intList = new ArrayList<Integer>(); intList.add(1); intList.add(2); //o.s.v.. for(Integer i : intList) { System.out.println(i); }

Ang. att skriva ut udda tal: Simplast är väl att göra så här:

List<Integer> intList = new ArrayList<Integer>(); intList.add(1); intList.add(2); intList.add(3); intList.add(4); intList.add(5); intList.add(6); for (Integer i : intList) { if (i % 2 != 0) { System.out.println(i); } }

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk
Skrivet av SanTeoX:

List<Integer> intList = new ArrayList<Integer>(); intList.add(1); intList.add(2); intList.add(3); intList.add(4); intList.add(5); intList.add(6); for (Integer i : intList) { if (i % 2 != 0) { System.out.println(i); } }

Vaför använder folk alltid modulo operatorn för att räkna ut ifall tal är jämna? Mycket mer logiskt att använda logic-and för det i programmeringssyfte ifall du tänker binärt. Modulo är ju faktiskt den mest krävande operatorn som finns.

Tex:

if( i & 1 == 0){ Jämn } else { Ojämn }

Första siffran i alla binära tal står för 1 eller 0. Det vill säga om vi gör logic-and med 1 får vi endast ut värdet av den första siffran dvs faktorn som gör talet jämn eller ojämnt när alla kommande siffror är potenser av 2 (jämna).

Permalänk
Hedersmedlem
Skrivet av vmattsson:

Vaför använder folk alltid modulo operatorn för att räkna ut ifall tal är jämna? Mycket mer logiskt att använda logic-and för det i programmeringssyfte ifall du tänker binärt. Modulo är ju faktiskt den mest krävande operatorn som finns.

Tex:

if( i & 1 == 0){ Jämn } else { Ojämn }

Första siffran i alla binära tal står för 1 eller 0. Det vill säga om vi gör logic-and med 1 får vi endast ut värdet av den första siffran dvs faktorn som gör talet jämn eller ojämnt när alla kommande siffror är potenser av 2 (jämna).

Det var nu kanske en retorisk fråga men många har ett högnivå-tänk när det programmerar och då missar man lätt sånt som bitwise-operatorer.