Trädvy Permalänk
Medlem
Registrerad
Dec 2014

Java, nästlade loopar

Hejsan!

Jag försöker lösa en uppgift. Eller tja, jag löste den innan jag läste så noga.
Uppgiften lyder:

En bank transporterar pengar med hjälp av bilar och dom placerar pengarna
på bilens golv i rader och kolumner. De vill att du skapar ett program som
grafiskt visar hur det kommer att se ut ifall de placerar pengarna i ett givet
antal rader och kolumner. Uppgiften är att skriva ett program som läser in två
värden, antalet rader och kolumner och därefter skriver ut en representation
av hur det skulle se ut. Se exemplet nedan för mer information.
Exempel:
3 rader och 7 kolumner
Utskrift:
XXXXXXX
XXXXXXX
XXXXXXX
Antalet rader och kolumner skall läsas in från tangentbordet och
representationen skall skrivas ut med hjälp av loopar.
Följande måste användas:
1. En Scanner
2. Två variabler (loop-variabler undantaget)
3. Nästlade loopar (en loop inuti en annan loop)

Jag löste detta genom

import java.util.Scanner; class Uppgift3{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); int row, column; System.out.println("Hur många rader?"); row = scan.nextInt(); System.out.println("Hur kolumner?"); column = scan.nextInt(); for(int r=1; r<=row; r++) { System.out.print('X'); for(int c=1; c<=column; c++) { System.out.print('X'); } System.out.println(); } } }

Detta funkade ju fint, tills jag såg att det skulle vara nästlade loopar.
Jag har inga problem med nästlade loopar i sig, jag har bara lite svårt att komma på hur jag ska kunna använda det i denna uppgift.
Förslag någon?

Tack för hjälpen

Trädvy Permalänk
Medlem
Registrerad
Feb 2013

Dina loopar är redan nästlade

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009

for(int r=1; r<=row; r++) {
for(int r=1; r<=kolumn; r++) {
printa x kolumner
}
printa y rader
}

så din är redan nestlad. uppgiften är korrekt

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av JJ72:

Hejsan!

Jag försöker lösa en uppgift. Eller tja, jag löste den innan jag läste så noga.
Uppgiften lyder:

En bank transporterar pengar med hjälp av bilar och dom placerar pengarna
på bilens golv i rader och kolumner. De vill att du skapar ett program som
grafiskt visar hur det kommer att se ut ifall de placerar pengarna i ett givet
antal rader och kolumner. Uppgiften är att skriva ett program som läser in två
värden, antalet rader och kolumner och därefter skriver ut en representation
av hur det skulle se ut. Se exemplet nedan för mer information.
Exempel:
3 rader och 7 kolumner
Utskrift:
XXXXXXX
XXXXXXX
XXXXXXX
Antalet rader och kolumner skall läsas in från tangentbordet och
representationen skall skrivas ut med hjälp av loopar.
Följande måste användas:
1. En Scanner
2. Två variabler (loop-variabler undantaget)
3. Nästlade loopar (en loop inuti en annan loop)

Jag löste detta genom

import java.util.Scanner; class Uppgift3{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); int row, column; System.out.println("Hur många rader?"); row = scan.nextInt(); System.out.println("Hur kolumner?"); column = scan.nextInt(); for(int r=1; r<=row; r++) { System.out.print('X'); for(int c=1; c<=column; c++) { System.out.print('X'); } System.out.println(); } } }

Detta funkade ju fint, tills jag såg att det skulle vara nästlade loopar.
Jag har inga problem med nästlade loopar i sig, jag har bara lite svårt att komma på hur jag ska kunna använda det i denna uppgift.
Förslag någon?

Tack för hjälpen

Looparna är redan nästlade, dock gör inte din utskrift vad du har tänkt dig. Fundera en gång till på vad du ska göra, och fundera på vad det är du egentligen gör just nu.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Registrerad
Dec 2014

Jahaaaa...

Jag tänkte nåt i stil med...
if(görDitt){
}else{
if(görDatt)

Men det funkar alltså så här också

Jepp Gamergirl, jag ska kolla igenom det hela och se om jag kan få till det.

Tack så mycket för hjälpen. Det här sparade mig nog många timmars funderande. Haha

Trädvy Permalänk
Webbutvecklare
Moderator
Plats
::1
Registrerad
Dec 2002

@JJ72: Att loopar är nästlade innebär bara att de är placerade inuti varandra, och som de andra har påpekat är de redan det. Det blir dock lättare att läsa och arbeta med koden om du är noggrann med hur du formaterar den; det underlättar även om du är ensam med en liten uppgift, men ska du samarbeta med andra (eller dela kod för att få hjälp) så är det nödvändigt att hålla en konsekvent, läsbar stil. Kan tänka mig att din lärare har åsikter om att behöva läsa det också, kan du få poängavdrag för slarvig formatering? Fundera på varför dina indrag ser ut som de gör nu och börja med att skapa en god vana direkt.

for(int r=1; r<=row; r++) { System.out.print('X'); for(int c=1; c<=column; c++) { System.out.print('X'); } System.out.println(); } => for(int r=1; r<=row; r++) { System.out.print('X'); for(int c=1; c<=column; c++) { System.out.print('X'); } System.out.println(); }

Abstractions all the way down.

Trädvy Permalänk
Medlem
Registrerad
Dec 2014

Ok, tack

och....jag ska akta gräsmattan. Haha

Trädvy Permalänk
Medlem
Registrerad
Jun 2015

@JJ72:

Undantagshantering behövs oxå, tror jag Försök att inmata bokstav eller ngn annan symbol utan integer

public static void main(String[] args) () throws InputMismatchException { // din kod; try{ // alla scan.nextInt() här; } catch (InputMismatchException e){ //satser; }

Du kan använda while(true) with return variabelnNamn och continue i catch
Två loops, en för varje variabelns inmatning.

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009
Skrivet av JJ72:

Jahaaaa...

Jag tänkte nåt i stil med...
if(görDitt){
}else{
if(görDatt)

Men det funkar alltså så här också

Kom bara ihåg att det där inte är en nästlad loop.

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Registrerad
Dec 2014

Nä just det inte den biten