Hjälp med java-programmering

Allt om hård- och mjukvara samt övriga it-relaterade diskussioner.

 Moderatorer: Alien, atoms

Hjälp med java-programmering

Inläggav Eyesonly » 2011-12-02 9:43:11

Jag håller på att lära mig java nu. Tack vara Miche så hittade jag den här guiden. http://www.cafeaulait.org/javatutorial.html Allt gick bra tills jag kom till ett program som heter factorial. Jag kan tyvärr inte ge en sidreferense så ni får söka. Programmet i fråga har 2 delar och ser ut så här.

Kod: Markera allt
class Factorial {

  public static void main(String args[]) {

    int n;

    while ((n = getNextInteger()) >= 0)  {
      System.out.println(factorial(n));
    }

  } // main ends here

}


Kod: Markera allt
long factorial (long n) {

  int i;
  long result=1;
 
  for (i=1; i <= n; i++) {
   result *= i;
  }
 
  return result;

} // factorial ends here


Det här kompilerar inte alls. Vad är felet? Jag vet att det finns flera men har inte tid att nämna allt nu. Sen finns ett program som sägs testa factorial metoden i det tidigare koden. Det här kompilerar.

Kod: Markera allt
class FactorialTest {

  public static void main(String args[]) {

    int n;
    int i;
    long result;

    for (i=1; i <=10; i++)  {
      result = factorial(i);
      System.out.println(result);
    }

  } // main ends here
 
 
  static long factorial (int n) {

  int i;
  long result=1;
 
  for (i=1; i <= n; i++) {
   result *= i;
  }
 
  return result;

} // factorial ends here


}


Har jag fattat fel och är det inte ens tänkt att det första programmet ska köras? Ni som inte kan java eller som kan men vill fräscha upp kunskaperna får gärna läsa guiden och säga vad ni tycker.
Eyesonly
 
Inlägg: 972
Anslöt: 2006-11-05
Ort: Kristinehamn

Re: Hjälp med java-programmering

Inläggav barracuber » 2011-12-02 10:22:04

Jag såg inte att getnextinteger() var definierad nånstans och vet inte ifall den är inbyggd.

Googlade fram detta, för att ytterligare krångla till det ;-)

http://www.freejavaguide.com/file_streams.htm
barracuber
 
Inlägg: 10992
Anslöt: 2007-02-11
Ort: Västsverige

Re: Hjälp med java-programmering

Inläggav HGJ » 2011-12-02 17:27:11

barracuber skrev:Jag såg inte att getnextinteger() var definierad nånstans och vet inte ifall den är inbyggd.

Den definieras senare i guiden:

We've simply named two methods, getNextInteger() and factorial() without worrying about their exact implementations. We can add the rest of the code in smaller, easier-to-understand pieces. Let's write the factorial method first.

Next we promised to write a getNextInteger() method that will accept an integer from the user. Here it is:

Kod: Markera allt
static int getNextInteger() {
 
    String line;
 
    DataInputStream in = new DataInputStream(System.in);
    try {
      line = in.readLine();
      int i = Integer.valueOf(line).intValue();
      return i;
    }
    catch (Exception e) {
      return -1;
    }
       
  } // getNextInteger ends here
HGJ
Assistent
 
Inlägg: 5556
Anslöt: 2007-06-02

Re: Hjälp med java-programmering

Inläggav barracuber » 2011-12-02 17:55:28

HGJ skrev:http://www.freejavaguide.com/file_streams.htm
HGJ skrev:
barracuber skrev:Jag såg inte att getnextinteger() var definierad nånstans och vet inte ifall den är inbyggd.

Den definieras senare i guiden:
..


Den sajten jag länkade till - http://www.freejavaguide.com - är lite märklig för den har ingen som helst avsändare; det finns ingen "About"-sida, ingen kontaktinfo och någon info om sajtägaren. Själva sajtinnehållet - ett stort antal tutorials i java, SQL, HTML och XML - ser dock proffsigt ut även om jag inte läst i detalj ännu.

Funktionen getNextInteger() är något som skapas specifikt i File I/O and Streams-exemplet. Jag var otydlig när jag skrev "jag vet inte ifall den är inbyggd". Det kändes bara inte som ett funktionsnamn som Sun (javas skapare) normalt sett skulle döpa inbyggda funktioner till *)

Eyesonly, kan du leta i din tutorial och se om du hittar koden till dess funktion getNextInteger() ?


*)
Men tji för mig direkt hittade jag ett exempel från javaapplikationsservern JBoss där funktionsnamnet förekommer - i klassen
Class AutoNumberFactory. JBoss är dock inte en produkt som är gjord av Sun.

Mycket sannolikt kan man hitta massvis med fler exempel där detta funktionsnamn förekommer. Min poäng var bara att jag tvivlade på att det förekommer i själva kärnan av javaspråket (core java).
barracuber
 
Inlägg: 10992
Anslöt: 2007-02-11
Ort: Västsverige

Re: Hjälp med java-programmering

Inläggav HGJ » 2011-12-02 18:10:56

barracuber skrev:Funktionen getNextInteger() är något som skapas specifikt i File I/O and Streams-exemplet. Jag var otydlig när jag skrev "jag vet inte ifall den är inbyggd". Jag förstod hela tiden att Sun (javas skapare) aldrig döpa inbyggda funktioner på det sättet.

Eyesonly, kan du leta i din tutorial och se om du hittar koden till dess funktion getNextInteger() ?

Jag citerade ur Eyesonlys tutorial. http://www.cafeaulait.org/javatutorial.html och http://www.freejavaguide.com/file_streams.htm har identiska getNextInteger()-metoder.
HGJ
Assistent
 
Inlägg: 5556
Anslöt: 2007-06-02

Re: Hjälp med java-programmering

Inläggav barracuber » 2011-12-02 18:31:52

HGJ skrev:
barracuber skrev:Funktionen getNextInteger() är något som skapas specifikt i File I/O and Streams-exemplet. Jag var otydlig när jag skrev "jag vet inte ifall den är inbyggd". Jag förstod hela tiden att Sun (javas skapare) aldrig döpa inbyggda funktioner på det sättet.

Eyesonly, kan du leta i din tutorial och se om du hittar koden till dess funktion getNextInteger() ?

Jag citerade ur Eyesonlys tutorial. http://www.cafeaulait.org/javatutorial.html och http://www.freejavaguide.com/file_streams.htm har identiska getNextInteger()-metoder.


Sorry, sedan du citerade mig så formulerade jag om mitt inlägg inte. Men jag låter originaltexten stå kvar.

Det stämmer, jag missade det för jag tittade aldrig på cafeaulait-exemplet. Det råkar vara exakt samma implementering av metoden dvs samma kod i båda exemplen. Men båda exemplen verkar ha några år på nacken och det är nog mer eller mindre en slump att det är samma kod som används på båda ställena. Någon av dem har lånat koden nånstans ifrån (kanske från varandra). Jag tvivlar dock på att Sun har skrivit den koden.

Du har förresten helt rätt i att det är en metod (inte en funktion) enligt OOP. My bad! :wink:

Att jag nämnde att koden till getNextInteger() saknades i första inlägget var bara ett infall. Det kan vara andra saker som gör att Eyesonly ställer frågan.
barracuber
 
Inlägg: 10992
Anslöt: 2007-02-11
Ort: Västsverige

Re: Hjälp med java-programmering

Inläggav Eyesonly » 2011-12-03 10:34:13

Men det i sig är ett fel med guiden. Jag ska till att börja läsa om arrays. Om guiden hade varit en bok så skulle koden om getNextInteger stå nästan 10 sidor bort. Varför? Jag trodde att koden som stod kunde köras. Uppenbarligen är det inte så utan det är först tredje koden som ska köras. Hur ska en nybörjare kunna veta sånt? Jag läser allt som det står och vill inte hoppa i texten. Därför tror jag att allt som står ska gå att köra.

När jag klistrade en den nya koden så fick jag först 7 nya fel. Efter att ha flyttat en } till slutet av all kod istället för i slutet av den första koden så fick jag 2 identiska fel.
Kod: Markera allt
Factorial.java:30: error: cannot find symbol
    DataInputStream in = new DataInputStream(System.in);
                             ^
  symbol:   class DataInputStream
  location: class Factorial

DataInputStream Omnämns lägre ner i kapitlen om att läsa text om nummer. Men där är inte jag än heller. Nästa vecka ska jag få låna böcker om java. Hoppas de är bättre på att förklara vad som ska köras och vad som bara är exempel. Men jag gillar möjligheten att kopiera kod från guiden och slippa skriva in den själv. Jag är tacksam på tips om hur jag kan tolka texten och slippa köra kodexempel som inte är menade att köras.

Edit
Här är hela koden som jag döpt till Factorial.java.
Kod: Markera allt
class Factorial {

  public static void main(String args[]) {

    int n;

    while ((n = getNextInteger()) >= 0)  {
      System.out.println(factorial(n));
    }

  } // main ends here

static long factorial (long n) {

  int i;
  long result=1;
 
  for (i=1; i <= n; i++) {
   result *= i;
  }
 
  return result;

} // factorial ends here

static int getNextInteger() {
 
    String line;
 
    DataInputStream in = new DataInputStream(System.in);
    try {
      line = in.readLine();
      int i = Integer.valueOf(line).intValue();
      return i;
    }
    catch (Exception e) {
      return -1;
    }
       
  } // getNextInteger ends here
}
Eyesonly
 
Inlägg: 972
Anslöt: 2006-11-05
Ort: Kristinehamn

Re: Hjälp med java-programmering

Inläggav barracuber » 2011-12-03 11:28:21

Blir säkert bättre när du kommer igång med böckerna. Okända webbsidor är ofta ofullständiga och innehåller fel om de inte är gjorda av Sun, IBM eller andra tunga namn.

Själv gillar jag helst video tutorials. Finns massvis på nätet, både lagligt och pirat.
barracuber
 
Inlägg: 10992
Anslöt: 2007-02-11
Ort: Västsverige

Re: Hjälp med java-programmering

Inläggav Miche » 2011-12-03 12:35:27

barracuber skrev:Själv gillar jag helst video tutorials.

Min ADHD gör att jag tröttnar på sådana, oftast kör de för långsamt för att min hjärna ska kunna hålla igång koncentrationen och inte fara iväg med annat... :(
Miche
 
Inlägg: 28797
Anslöt: 2009-01-08
Ort: Karlholmsbruk

Re: Hjälp med java-programmering

Inläggav Mellanvärld » 2011-12-03 15:27:47

Eyesonly skrev:Men det i sig är ett fel med guiden. Jag ska till att börja läsa om arrays. Om guiden hade varit en bok så skulle koden om getNextInteger stå nästan 10 sidor bort. Varför? Jag trodde att koden som stod kunde köras. Uppenbarligen är det inte så utan det är först tredje koden som ska köras. Hur ska en nybörjare kunna veta sånt? Jag läser allt som det står och vill inte hoppa i texten. Därför tror jag att allt som står ska gå att köra.

När jag klistrade en den nya koden så fick jag först 7 nya fel. Efter att ha flyttat en } till slutet av all kod istället för i slutet av den första koden så fick jag 2 identiska fel.
Kod: Markera allt
Factorial.java:30: error: cannot find symbol
    DataInputStream in = new DataInputStream(System.in);
                             ^
  symbol:   class DataInputStream
  location: class Factorial

DataInputStream Omnämns lägre ner i kapitlen om att läsa text om nummer. Men där är inte jag än heller. Nästa vecka ska jag få låna böcker om java. Hoppas de är bättre på att förklara vad som ska köras och vad som bara är exempel. Men jag gillar möjligheten att kopiera kod från guiden och slippa skriva in den själv. Jag är tacksam på tips om hur jag kan tolka texten och slippa köra kodexempel som inte är menade att köras.

Edit
Här är hela koden som jag döpt till Factorial.java.
Kod: Markera allt
class Factorial {

  public static void main(String args[]) {

    int n;

    while ((n = getNextInteger()) >= 0)  {
      System.out.println(factorial(n));
    }

  } // main ends here

static long factorial (long n) {

  int i;
  long result=1;
 
  for (i=1; i <= n; i++) {
   result *= i;
  }
 
  return result;

} // factorial ends here

static int getNextInteger() {
 
    String line;
 
    DataInputStream in = new DataInputStream(System.in);
    try {
      line = in.readLine();
      int i = Integer.valueOf(line).intValue();
      return i;
    }
    catch (Exception e) {
      return -1;
    }
       
  } // getNextInteger ends here
}
Tror du borde stoppa in
Kod: Markera allt
import java.io.*;
på första raden i filen, så att den hittar klassen "DataInputStream".
Mellanvärld
 
Inlägg: 1243
Anslöt: 2010-11-28
Ort: Göteborg

Re: Hjälp med java-programmering

Inläggav Eyesonly » 2011-12-04 10:39:33

Tack Mellanvärld men hur ska jag veta det? Hoppas någon bok kan förklara bättre.
Eyesonly
 
Inlägg: 972
Anslöt: 2006-11-05
Ort: Kristinehamn

Re: Hjälp med java-programmering

Inläggav Mellanvärld » 2011-12-05 1:36:29

Eyesonly skrev:Tack Mellanvärld men hur ska jag veta det? Hoppas någon bok kan förklara bättre.
Detta borde ju egentligen ha stått med i exempelkoden, i synnerhet om det är på nybörjarnivå; den som skrev den var nog slarvig.
Mellanvärld
 
Inlägg: 1243
Anslöt: 2010-11-28
Ort: Göteborg

Re: Hjälp med java-programmering

Inläggav Miche » 2011-12-05 1:42:47

Jag misstänker att sidan är tänkt för de som redan är rätt haj på programmering (och då borde den passa mig, bara jag lyckas komma igång...)
Miche
 
Inlägg: 28797
Anslöt: 2009-01-08
Ort: Karlholmsbruk

Re: Hjälp med java-programmering

Inläggav Eyesonly » 2011-12-05 12:46:52

Jag valde att gå vidare så nu har jag kommit fram till något som heter HelloWorldApplet. Den som läser så långt måste skapa en mapp men namnet classes i den mapp som html-filen ligger i och flytta class-filen dit. Jag letade länge efter var class-filen skulle ligga innan jag kom på det. Gör man inte så så ger web-läsaren ett fel om saknad class. :wink:
Eyesonly
 
Inlägg: 972
Anslöt: 2006-11-05
Ort: Kristinehamn

Återgå till IT-forum



Logga in