Visa obesvarade inlägg | Visa aktiva trådar Aktuellt datum och tid: 10 jul 2020, 01:25



Svara på tråd  [ 23 inlägg ]  Gå till sida 1, 2  Nästa
 Behöver lite java hjälp 
Författare Meddelande
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg Behöver lite java hjälp
Tja har lite problem i java. Hoppas någon kan hjälpa.

Mitt problem är att jag vill kunna mata in en valfri sträng i körtid, med ospecificerade antal tokens för att sedan kunna splitta upp strängen och spara de olika tokens till olika variabler.
Är det någon som vet något smart sätt att göra det på???

Lite newbie på java. Tack på förhand.
Lennart

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


05 jul 2007, 18:30
Profil

Blev medlem: 03 mar 2008, 01:30
Inlägg: 30172
OS: Ubuntu
Svara med citat
Inlägg SV: Behöver lite java hjälp
tjena, jag skulle råda dig att skapa en scanner instans:

Kod:

Scanner scan = new Scanner(System.in);
// sedan är det bara att scana på

if(scan.hasNextInt()) {
   int i = scan.readNextInt();
}
// osv osv...



om du vill dela upp dina variabler i strängen med te.x. : tecken så går det också bra

Kod:
String test = "1:2:3:4:5";
Scanner scan = new Scanner(test);
scan.useDelimiter("\\s*:\\s*");

scan.readNextInt();
//osv...




05 jul 2007, 18:39
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Tack för ett snabbt svar, men får det tyvärr inte riktigt att funka som jag vill.
bifogar lite kod här som kanske ger lite mer förklaring.

Kod:

Scanner    in = new Scanner (System.in);
String    s = in.next ();                         // här tänkte jag skriva in t.ex "kalle olle peter" eller någon sträng med kanske 6 tokens dvs ospecificerat när man kör programmet.

// någon loop med en metod som delar upp antalet token som typ hasNext eller liknande
// här skulle jag vilja ha något magiskt som sparar alla tokens i olika variabler som inte är i förväg kända.



Hoppas att jag inte missförstod din förklaring, men e lite ny på java så hoppas ni har tålamod :)

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


05 jul 2007, 19:12
Profil

Blev medlem: 03 mar 2008, 01:30
Inlägg: 30172
OS: Ubuntu
Svara med citat
Inlägg SV: Behöver lite java hjälp
nåt i stil med detta?


Kod:
Vector<String> v = new Vector<String>();
Scanner    in = new Scanner (System.in);


while(in.hasNext())
   v.add(in.next());


då lagras all indata i vektorn v...


edit: Jag har inte kompilerat och testat koden, men nåt i den där stilen är kanske vad du letar efter...


05 jul 2007, 19:31
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Det verkar vara rätt väg att gå, men när jag exekverar koden så får jag ingen stop på vektorn, utan man bara fortsätter att skriva in ord till vektorn men man kommer inte vidare i programmet?

Anledningen till att jag vill kunna dela upp tokens är att jag försöker skriva ett filhanterar program (gör detta för att lära mig java) som t.ex kan lista filer eller byta namn på två filer och att jag vill kunna skriva mv fil1 fil2 i prompten i programmet, för att kunna göra det måste jag kunna skriva allt som en sträng men kunna dela upp strängen i tre delar. rm skall gå till en if-sats som gör ett metod anrop med två variabler fil1 och fil2. jag bifogar lite av koden jag skrivit så kanske det blir ännu klarare.

Kod:

Scanner    in = new Scanner (System.in);
while (true)
{
   File    kat = new File (".");                     
   String    currentdir = getProperty ("user.dir");
        out.print (currentdir + ">");     // ovanstående kod visar en kommandopromt med sökväg

        String    command = in.next ();   //här måste jag kunna dela upp kommando och argument

        if (command.equals("ls"))
   {
      ls ();
   }
        else if (command.equals ("mv"))
   {
      mv (argumen1, argument2);
   }
public static void ls ()
{
   File    kat = new File (".");
   String[]    katFiles = kat.list ();
        for (int i = 0; i < katFiles.length; i++)
   {
      System.out.println (katFiles[i] + " ");      // listar filer i nuvarande katalog
   }
}
public static void mv (String argument1, String argument2)
{
   File    f = new File (".", argument2);
   argument1.renameTo (f);                                       
   System.out.println ("the file " + argument1 + "has been renamed to " + argument2);
}



Hoppas detta inte blev för rörigt och att någon fattar vad jag menar. Skulle vara riktigt uppskattat om någon kunde peta till koden rätt där jag behöver dela upp strängen om någon orkar läsa all kod :).

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


Senast redigerad av lennart 06 jul 2007, 00:01, redigerad totalt 1 gång.



05 jul 2007, 23:24
Profil

Blev medlem: 03 mar 2008, 01:30
Inlägg: 30172
OS: Ubuntu
Svara med citat
Inlägg SV: Behöver lite java hjälp
Nåt i den här stilen borde fungera:

Kod:
         else if (command.equals ("mv"))
         {
            Scanner cmd = new Scanner(command);
            String arg1 = cmd.next();
            String arg2 = cmd.next();

            if(arg1 == null || arg2 == null) {
               System.out.println("bad arguments");
            } else {
               mv (arg1, arg2);
            }


06 jul 2007, 12:54
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Tackar som fan!!!
koden du gav funkade efter justering till mina variabler.
Sjysst att du hade tålamod med mig :).

Två frågor till dock, finns det några metoder eller objekt som fixar kopiering av filer och finns det något fiffigt sätt så man kan förflytta sig i filsystemet i java, tänkte så man kan implementera cd kommandot?

Har kollat i java.io.File utan att hitta någonting tillfredsställande.

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


Senast redigerad av lennart 06 jul 2007, 16:39, redigerad totalt 1 gång.



06 jul 2007, 16:37
Profil

Blev medlem: 03 mar 2008, 01:30
Inlägg: 30172
OS: Ubuntu
Svara med citat
Inlägg SV: Behöver lite java hjälp
tja, det enklaste skulle nog vara att du låter programmet hålla koll på vilken mapp du står i, typ skapa ett File objekt som heter du currentDir... Sedan om du får cd xxx så kollar du bara om det finns en mapp xxx i currentDir. Om du annars får nåt i stil med cd /zzz så försöker du bara skapa ett nytt File objekt och om det går bra så låter du currentDir peka på det filobjektet.

Sedan så skriver du bara ut currentDir.getName() eller getPath eller vad nu metoden heter.

Angående att kopiera filer så vet jag inte, om du vill kan ju bara skapa en ny fil, och sedan koppla ihop lite Readers och Writers för att manuellt kopiera över filen.


06 jul 2007, 16:47
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Är inte riktigt säker på om jag hänger med bifogar lite kod som kanske är åt rätt håll. Men jag får ivarje fall inte koden att funka som jag vill.

Kod:
.......
String command = in.nextLine ();
Scanner   scanner = new Scanner (command);
command = scanner.next ();    // ovanstående kod matar in kommandon med argument
.......
.......
else if (command.equals ("cd"))
{
   String arg1 = scanner.next();
   cd (arg1);
}
.......
public static void cd (String argument)
{
   File    currentDir = new File (".");
   File   nextDir = new File (argument);
   if (nextDir.exists ())
       currentDir = nextDir;                 // väldigt osäker på denna rad???
   String s = (currentDir.getName());
        // String s = (currentDir.getCanonicalPath ());   gör jag denna istället så visas rätt sökväg, men antar att man inte byter plats i filsystemet.
   System.out.println (s);
}

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


06 jul 2007, 19:10
Profil

Blev medlem: 29 jun 2007, 20:21
Inlägg: 154
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
om jag bara får föreslå en alternativ lösning, även fast problemet är löst.

   

Kod:
private static final InputStreamReader isr=
new InputStreamReader(System.in);

private static final BufferedReader br=new BufferedReader(isr);

private static final StreamTokenizer st=
new StreamTokenizer(br);

st.nextToken();

if(st.ttype==st.TT_WORD)
string s = st.sval();


angående kopiera filer så kan man ju låta java exekrevera systemkommandon.

System.exec("cp", "fil1", "fil2")

eller nåt sånt.


mvh
Anders


06 jul 2007, 23:53
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Tack Anders för förslaget, har dock inte hunnit med att testa det än, men skall göra så fort jag hinner, jag har fastnat på lite andra bagateller. Angånde kopieringen så har jag redan löst det, men har som sagt mindre problem. Hoppas någon kan hjälpa mig med detta?
Här följer kod för att illustrera problemen.

Kod:
public static void cp (String argument1, String argument2) throws IOException
{
   File    oldfile = new File (argument1);
   File    newfile = new File (argument2);
        if (oldfile.exists ());
       {
       long filelength = oldfile.length ();   // blir fel med texten: "possible loss of precision found   : long
required: int", funkar dock om man gör så här: int filelength = (int)oldfile.length (); men kan vara bra att ha long som fillängd?
            newfile.createNewFile ();
       byte[]    bytesTocopy = new byte[filelength];
       bytesTocopy = copy.readbytes (filelength, argument1);
       copy.writebytes (bytesTocopy, filelength, argument2);
        }
        else             // else och else if klagar kompilatorn på med följande text: "'else' without 'if'"
        {
       System.out.println ("the filename dosen´t exists");
            break;     // break satser klagar också kompilatorn på med texten: "break outside switch or loop" i alla mina metoder även om jag lägger dom i en if-sats som fungerar.
         }
}


Observera att detta är oberoende fel av varandra dvs att om jag bortkommenterar två fel kvarstår ett.  Kanske skall tillägga att metoderna ligger i en egen klass. Om någon känner sig manad att hjälpa mig skulle jag bli jätteglad. Skulle också vara snällt ifall någon kan hjälpa mig med hur man kan implementera "cd" kommandot fattar fortfarande inte hur jag skall gå till väga.

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


08 jul 2007, 23:44
Profil

Blev medlem: 29 jun 2007, 20:21
Inlägg: 154
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Jag tror jag vet vad det är som är fel.

När du lagrar ett stort tal i en long så kommer du att sätta de sista siffrorna(de minsta, närmast noll) till just noll och på så vis så förlorar du exakt hur stor filen är. En int tror jag räcker för dig den ger möjlighet till 2^31 -1 (trettio två bitar minus en för tecken) stora tal. Annars så kan du köra med klassen BigInteger som tilllåter dig ha hur stora tal som helst utan att förlora värdesiffror på slutet.


angående cd-kommandot titta på den här sidan

http://java.sun.com/docs/books/tutorial ... /file.html

det borde lösa dina problem =)


09 jul 2007, 00:48
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
skaggapa du råkar inte veta varför jag inte kan göra else eller else if i mina metoder? Eller varför jag inte kan breaka???

Edit: Djävlar vilken sjysst tutorial du länka till, den tackar jag varmt för :).

Edit igen: Upptäckte felet  med if-satserna hade visst råkat slå in ett kolon där, kraftigt irriterande.

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


Senast redigerad av lennart 09 jul 2007, 03:32, redigerad totalt 1 gång.



09 jul 2007, 00:57
Profil

Blev medlem: 29 jun 2007, 20:21
Inlägg: 154
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Det är lungt, spana runt bland suns guider det finns väldigt mycket matnyttigt.

Jag antar att allt har löst sig?

mvh
Anders


09 jul 2007, 14:27
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Nästa hela mitt program funkar som jag har tänkt mig förutom att det kastar undantag när man skall kopiera kataloger. Förutom det så har jag fortfarande problem med att implementera "cd", fattar verkligen inte hur jag skall gå till väga för att bygga det kommandot, har lustläst allt om File klassen?

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


09 jul 2007, 22:32
Profil

Blev medlem: 29 jun 2007, 20:21
Inlägg: 154
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Hmm jag tycker det borde gå med standard java.

annars finns paketet jTUX

http://basepath.com/aup/jtux/

Men det är mer inriktat på att göra "low-level system calls" i unix det borde dock funka med linux.


men om du med standard java

Kod:


//anropas med cd:s argument ex cd(..) cd(temp)
// returnerar en fil som pekar till det nya mappen
// kastar en exception som måste implementeras

private static File cd(String path){
    File f = new File(path)
    if(f.isDirectory())
      return f;
    else
      throw new NoSuchDirException("No directory :"+path);

}



har inte kört koden men den borde funka.

Du måste själv implementera Exceptionen men det är ju en baggis =) eller ändra till någon standard.

mvh
Anders


15 jul 2007, 19:14
Profil
Användarvisningsbild

Blev medlem: 20 okt 2006, 21:31
Inlägg: 70
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Har lyckats lösa "cd", men din variant ser bättre ut skall försöka implementera den istället. Jag undrar dock lite hur man skall designa sin kod, som det ser ut nu kör jag med ett main program som anropar olika metoder. Har läst på lite om hur man skapar egna object, men jag undrar i vilka situationer det är bra att göra egna object eller inte? Programmet ju funkar som det är tänkt utan egna object, men det kanske är bättre programmerings stil att göra egna object?

_________________
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=325003&view=detailed#ProductTabs.


19 jul 2007, 11:16
Profil

Blev medlem: 29 jun 2007, 20:21
Inlägg: 154
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Det finns ju olika stilar av programmering och java som är fallet här är ju ett objektorienterat språk.

Om du ska vara helt korrekt och hålla på den objektsorienterade approachen så ska _allt_ vara objekt. Om man är riktigt nitisk så ska även siffor vara objekt.

Kod:
Integer in = new Integer(2);


Så långt har jag personligen aldrig gått.

Tänk också på att använda många små och väl dokumenterade metoder (kom ihåg att även metoder kan använda metoder) och tydliga namn.

Använd tabbar för att man enkelt ska se var olika satser börjar och slutar. Tror sun har exempel på hur man ska formatera sin kod på ett bra sätt.

och kom ihåg kommentera kommentera och kommentera speciellt om andra ska använda sig av eller se din kod även för dig själv.

Du behöver givetvis inte följa dessa riktlinjer men om du ska ha och göra med andra programmerare kan det bara lämpligt.

mvh
Anders


19 jul 2007, 12:55
Profil
Användarvisningsbild

Blev medlem: 12 okt 2006, 19:08
Inlägg: 425
Ort: Lund
OS: Ubuntu
Svara med citat
Inlägg SV: Behöver lite java hjälp
skaggapa skrev:
och kom ihåg kommentera kommentera och kommentera speciellt om andra ska använda sig av eller se din kod även för dig själv.


Kommentarer är överskattat, man ska skriva så pass enkelt och snyggt utformat så att koden talar för sig själv! Då behövs inga kommentarer..

_________________
// So long, and thank you for all the fish

"Your Ubuntu User number is # 10448"


19 jul 2007, 14:00
Profil
Användarvisningsbild

Blev medlem: 14 sep 2006, 09:42
Inlägg: 401
Ort: Garphyttan
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS
Svara med citat
Inlägg SV: Behöver lite java hjälp
Victor skrev:
Kommentarer är överskattat, man ska skriva så pass enkelt och snyggt utformat så att koden talar för sig själv! Då behövs inga kommentarer..


Jobbar man med andra är det bra att förklara sig så mycket som möjligt, det ger dessutom en chans för andra att lära sig av koden. Dvs välformad kod och kommentarer - de är inte varandras motsatser.

_________________
/ Mattias från designbilder.se


19 jul 2007, 14:27
Profil WWW
Visa inlägg nyare än:  Sortera efter  
Svara på tråd   [ 23 inlägg ]  Gå till sida 1, 2  Nästa

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 56 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
Main Engineer for phpBB3: Bertie at phpBB.com © 2000 - 2002, 2005 - 2007, the Group behind the Open Source code of phpBB.
Designed by STSoftware, modified by Katt, Konservburk & Peetra. Swedish translation by Peetra & phpBB Sweden © 2006-2011