Avatar billede mlunde Nybegynder
05. oktober 2008 - 11:21 Der er 11 kommentarer og
1 løsning

Hjælp til nested loop

Jeg skal lave en for loop, der når der bliver indtastet en værdi, angiver hvor mange stjerner ( * ) der skal være på en linie.

Fejlen ligger et sted ved for-loopet, men jeg er ikke selv i stand til lige at gennemskue den. Nogle der kan hjælpe?

Hilsen Michael

import java.util.Scanner;

public class AS51 {

    /**
    * Author Michael Lunde
    */
    public static void main(String[] args) {
       
       
        int width=0;
       
        Scanner keyboard = new Scanner(System.in);
       
        System.out.println("Please enter an integer greater than zero.");
        row = keyboard.nextInt();
       
        System.out.println();
       
       
        for (int row > 0)  {
            row++;
            width += 1;
           
            for (int column = 1; column<=width; column++)
                System.out.print("*");
            System.out.println();
       
        }
       
       
       
        }
    }
Avatar billede martinbk Nybegynder
05. oktober 2008 - 13:50 #1
ja dit problem består i at du ikke giver dit for loop nok paramtere, et for-loop forventer 3 paramtere, 1. sættes en værdi, 2. er dit conditional statement, og 3. er "gør det her efter gennemløb"

eksempel:
for(int i = 0; i > 0; i++) {
  // gør noget
}

hvis du insistere på at bruge et for-loop kan din kode vist omskrives til:

for(;row > 0;row++) {
  width += 1;
  for (int column = 1; column<=width; column++)
    System.out.print("*");
  System.out.println();
}
Avatar billede superanden Nybegynder
05. oktober 2008 - 17:54 #2
Det bunder som ovenstående i at du laver din første for lykke forkert.

Du kan bare udskifte for med while så spiller det.

    for (int row > 0)  {
            row++;
            width += 1;
         
            for (int column = 1; column<=width; column++)
                System.out.print("*");
            System.out.println();
     
        }

Udskiftes med:

    while(row > 0)  {
            row++;
            width += 1;
         
            for (int column = 1; column<=width; column++)
                System.out.print("*");
            System.out.println();
     
        }
Avatar billede arne_v Ekspert
05. oktober 2008 - 18:27 #3
Jeg tror mest på for løkken.

while(row > 0)  {
    row++;
    ...
}

vil køre forholdsvis længe ...
Avatar billede mlunde Nybegynder
05. oktober 2008 - 22:34 #4
Tak for hjælpen.
Den kører dog bare uendeligt. Den skal helst kun vise det antal man taster ind.
Avatar billede mlunde Nybegynder
07. oktober 2008 - 04:55 #5
Nogle der kan hjælpe med det?
Avatar billede ulrikm Nybegynder
07. oktober 2008 - 19:36 #6
Hvis du bare vil udskrive et antal stjerner der svarer til det indtastede tal, kan du gøre det sådan:

    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
       
        System.out.println("Please enter an integer greater than zero.");
        row = keyboard.nextInt();
       
        System.out.println();
       
        for (int i = 0; i < row; i++ ) 
        {
            System.out.print("*");
        }
        System.out.println();
    }
Avatar billede ulrikm Nybegynder
07. oktober 2008 - 19:44 #7
- og hvis du vil printe et antal linier der svarer til det indtastede tal med antal stjerner der svarer til linienummeret, kan du gøre sådan:

    public static void main(String[] args)
    {

     
        Scanner keyboard = new Scanner(System.in);
       
        System.out.println("Please enter an integer greater than zero.");
        row = keyboard.nextInt();
       
        System.out.println();
       
        for (int i = 0; i < row; i++ ) 
        {
            for(int j = 0; j <= i; j++ )
            {
            System.out.print("*");
            }
            System.out.println();
        }
    }
Avatar billede mlunde Nybegynder
07. oktober 2008 - 21:37 #8
Tusinde tak.
I kunne vel ikke hjælpe med at fortælle, hvordan jeg får den til at afbryde programmet, hvis man indtaster 'exit' i stedet for et tal?
Avatar billede ulrikm Nybegynder
07. oktober 2008 - 23:08 #9
Følgende antager at input enten er "exit" eller et heltal:

    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
       
        System.out.println("Please enter an integer greater than zero.");

        String input = keyboard.nextLine();

        if( input.equals("exit") )
            return;

        row = Integer.parseInt(input);
       
        System.out.println();
       
        for (int i = 0; i < row; i++ ) 
        {
            for(int j = 0; j <= i; j++ )
            {
            System.out.print("*");
            }
            System.out.println();
        }
    }
Avatar billede mlunde Nybegynder
07. oktober 2008 - 23:20 #10
Mange mange tak :D
Avatar billede mlunde Nybegynder
25. juli 2010 - 07:18 #11
Tråd slut
Avatar billede arne_v Ekspert
25. juli 2010 - 15:40 #12
Og du tog selv point fordi?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester