Avatar billede sandra26 Nybegynder
03. januar 2001 - 00:01 Der er 11 kommentarer og
1 løsning

hvad er fejlen?

Jeg kan ikke finde fejlen. I den første kode...er det metoden sum der er noget galt med....hvis summen skal være 230 udskriver den 2300 eller hvis den skal være 456 udskriver den 4560...altid en 0 for meget. Her er koden:
import java.util.Random;

public class Opgave2
{  public static void main(String[] args)
  { 
      Random generator = new Random();
        final int COLUMN_WIDTH = 10;
       
        int[][] tabel = new int[10][8];
        for (int i = 0; i < tabel.length; i++)
            for (int j = 0; j < tabel[i].length; j++)
                    tabel[i][j] = generator.nextInt(100);
                    printTable(tabel, COLUMN_WIDTH);
                   
        ConsoleReader console = new ConsoleReader(System.in);
       
        System.out.println(\"Indtast nummeret på den række du vil summere:\");
        int raekke = console.readInt() - 1;
       
        System.out.println(sum(tabel, raekke));
           
    }
   
        public static int sum (int[][] table, int r)
    {
            int sum = 0;
            for (int i = 0; i < table.length; i++)
                for (int j = 0; j < table[i].length; j++)
       
                sum = sum + table[r][j];
                return sum;
    }
               
       

     
  public static void printTable(int[][] table, int width)
  {  for (int i = 0; i < table.length; i++)
      {  for (int j = 0; j < table[i].length; j++)
        {  System.out.print(format(table[i][j], width));
        }
        System.out.println();
      }
  }

 
  public static String format(int n, int width)
  {  String nstr = \"\" + n;

      // pad with spaces

      while (nstr.length() < width)
        nstr = \" \" + nstr;

      return nstr;
  }
}

Og i denne her...den skal udskrive et tal opløftet i første, anden osv potens...
det virker fint med while og do-while løkken, men det går galt med for-løkken i stedet for 10, 100, 10000...udskriver den
10 110 110 1110....
forresten...der er også en fejl mere....i alle tre løkker...tager den et tal mere efter 10000...den skal helst tage den sidste tal inden 10000....Her er koden:
public class Opgave22
{
    public static void main(String[] args)
    {
        ConsoleReader console = new ConsoleReader(System.in);
       
        System.out.print(\"Indtast et tal: \");
        int tal = console.readInt();
        int oploeft = 1;
       
        do
        {
            oploeft = oploeft * tal;
            System.out.print(oploeft +\" \");
        }while ( oploeft < 10000);
       
        System.out.println();
       
        int oploeft1 = 1;
        while (oploeft1 < 10000)
        {
            oploeft1 = oploeft1 * tal;
            System.out.print(oploeft1 + \" \");
        }
       
        System.out.println();
       
       
            for ( int i = 1; i < 10000; i++)
        {
            i = i * tal;
            System.out.print(i + \" \");
        }
       
        System.out.println();
       
           
    }
}
Avatar billede codemon Nybegynder
03. januar 2001 - 00:20 #1
i din sum rutine løber du begge dimensioner igennem og du skal kun igennem én række. Derfor 10 gange for store sum-værdier

Drop øverste for løkke : for (int i = 0; i < table.length; i++)
og ændrer næste til
for (int j = 0; j < table[r].length; j++)
                          !
Avatar billede codemon Nybegynder
03. januar 2001 - 00:21 #2
mellemrummene passer ikke helt, udråbstegnet skulle markere at table[ i ] er ændret til table [ r ]
Avatar billede codemon Nybegynder
03. januar 2001 - 00:27 #3
i din forløkke incementerer du i ( med i++ )
dine gennemløb gør derfor (tal = 10)
1*10 = 10  ;  10++ = 11
11*10 = 110  ;  110++ = 111
111*10 = 1110  ; osv.
fjern i++ hvis du absolut vil lave det i en for løkke (det er ikke helt pænt at lave en for løkke som ikke er \"rigtig\" determinisktisk)
Avatar billede codemon Nybegynder
03. januar 2001 - 00:29 #4
dine løkker afbrydes kun når betingelsen opløft < 10000 ikke er sand, derfor løber den én gang over tallet.
Avatar billede sandra26 Nybegynder
03. januar 2001 - 00:51 #5
tak for det....*s*
jeg har lavet det med alle tre løkker, da det står i opgaven...der er nogle øvelser jeg skal igennem før min eksamen på fredag.....
og de der for-løkker synes jeg er lidt tricky...
Kan man slet ikke gøre noget ved at den løber en gang for meget?
Avatar billede sandra26 Nybegynder
03. januar 2001 - 00:52 #6
forresten....hvordan gør man at den udprinter gennemsnitet for alle rækker?
Avatar billede codemon Nybegynder
03. januar 2001 - 04:07 #7
Du kan sætte opløft*tal < 10000 som betingelse i din løkke i stedet for.

gennemsnit kan fx gøres ved:
public static void average (int[][] table)
{
  int sum;
  for (int i = 0; i<table.length; i++)
  {
      sum=0;
      for (int j = 0; j<table[i].length; j++)
        sum += table[i][j];
 
      System.out.println (\"Gennemsnit række \" + i + \":  \" + sum/table[i].length);
  }
}

og så pøj pøj med examen på fredag. Et gæt: Du studerer til datamatiker på lyngby. Så skal vi have samme opgave på fredag.
Avatar billede sandra26 Nybegynder
03. januar 2001 - 09:48 #8
tak......ilm..\'ss*
Men jeg læser i Vejle.....jeg er kun på første semester, vi har allerede eksamen efter første semester. Jeg går du fra du er på anden....*s*
Avatar billede codemon Nybegynder
03. januar 2001 - 10:03 #9
Nej, jeg er på første semester, men tak, det var en ros at du troede jeg var på anden. Jeg gættede fordi vi har eksamen samme dag som lyngby, da vi er en underafdeling deraf (os Bornholmere).

Avatar billede sandra26 Nybegynder
03. januar 2001 - 10:31 #10
du har i hvert fald mere styr på det end jeg har....jeg synes for-løkken noget af det mest forvirrende...
jeg var heldig ved sidste eksamen og kom ikke op i noget med for-løkken og fik 10.....men nu må vi se hvordan det går denne gang. I har nok skriftlig eksamen i 5 timer...vores eksamen er lavet om til mundtlig i 1 time
Avatar billede codemon Nybegynder
03. januar 2001 - 23:20 #11
Med et 10-tal bag sig går det vel ikke helt galt. En for-løkke kan du se som en deterministisk løkke (bliver kørt et bestemt antal gange)

for ( startværdi ; så længe at; tæl op eller ned )

så går det ikke helt galt. Det er dog langt fra det eneste den kan. Du kan skrive næsten hvad somhelst først og sidst. midterste skal være et bolsk udtryk.
men det her går fx godt

Random generer = new Random();
int var = 0;

for (System.out.println (\"SOP i en for løkke\"); var != 25; var = generer.nextInt() % 30)
    System.out.println (var);

System.out.println (var);

som du ser bliver første statement kun kørt én gang.
håber ikke jeg forvirrede dig med det sidste.

Vi er lidt \"heldigere\" med vores eksamen, vi har 6 timer.
Avatar billede sandra26 Nybegynder
04. januar 2001 - 21:27 #12
Codemon, held og lykke i morgen.....:-)
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