/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Et par hurtige
Fra : Anders Lund


Dato : 04-08-02 19:25

Jeg sidder og er ved at lave en kode der kan teste min webserver. Der er
bare et par hurtige spørsmål jeg gerne vil have svar på.

1)
Hvordan laver man en timer. Jeg ville gerne kunne måle hvorlang tid (i ms)
det tager at afvikle en stump kode.

2)
Hvordan caster jeg indputtet til main classen fra string til int. Mit
program klades med 2 parameter det ene er en string, den anden er et tal.
Hvordan modtager jeg tallet, og putter det i en int variabel? Jeg troede at
dette ville gøre det:
int ant = (int) args[1];
Hvad går der galt?




--
Mvh
Anders Lund
Anders@zaimGED.dk
Fjern geden fra min signatur!



 
 
Martin Møller Bæk (04-08-2002)
Kommentar
Fra : Martin Møller Bæk


Dato : 04-08-02 19:38

Hej Anders

Anders Lund wrote:

> Jeg sidder og er ved at lave en kode der kan teste min webserver. Der er
> bare et par hurtige spørsmål jeg gerne vil have svar på.
>
> 1)
> Hvordan laver man en timer. Jeg ville gerne kunne måle hvorlang tid (i ms)
> det tager at afvikle en stump kode.



long t = System.currentTimeMillis();
//..udfør kode
t = System.currentTimeMillis()-t;
System.out.println("udførselstid" + t);

>
> 2)
> Hvordan caster jeg indputtet til main classen fra string til int. Mit
> program klades med 2 parameter det ene er en string, den anden er et tal.
> Hvordan modtager jeg tallet, og putter det i en int variabel? Jeg troede at
> dette ville gøre det:
> int ant = (int) args[1];
> Hvad går der galt?


Integer.valueOf(args[1]).intValue()

>
> --
> Mvh
> Anders Lund
> Anders@zaimGED.dk
> Fjern geden fra min signatur!
>


Mvh
Martin Møller Bæk



Lars Dam (04-08-2002)
Kommentar
Fra : Lars Dam


Dato : 04-08-02 19:39

On Sun, 4 Aug 2002 20:25:10 +0200, "Anders Lund" <Anders@zaimGED.dk>
wrote:

>Jeg sidder og er ved at lave en kode der kan teste min webserver. Der er
>bare et par hurtige spørsmål jeg gerne vil have svar på.
>
>1)
>Hvordan laver man en timer. Jeg ville gerne kunne måle hvorlang tid (i ms)
>det tager at afvikle en stump kode.

En mulighed er at bruge System.XX.getCurrentTimeMillis() (check lige
selv).

>2)
>Hvordan caster jeg indputtet til main classen fra string til int. Mit
>program klades med 2 parameter det ene er en string, den anden er et tal.
>Hvordan modtager jeg tallet, og putter det i en int variabel? Jeg troede at
>dette ville gøre det:
>int ant = (int) args[1];
>Hvad går der galt?

Der går det galt at args[1] er en string, Du kan ikke konvertere ved
at bruge casting. Brug Integer.parseInt(string) for at konvertere til
et tal.

vh.ld


Ulrik Magnusson (04-08-2002)
Kommentar
Fra : Ulrik Magnusson


Dato : 04-08-02 22:18



Anders Lund wrote:

> Jeg sidder og er ved at lave en kode der kan teste min webserver. Der er
> bare et par hurtige spørsmål jeg gerne vil have svar på.
>
> 1)
> Hvordan laver man en timer. Jeg ville gerne kunne måle hvorlang tid (i ms)
> det tager at afvikle en stump kode.

long start = System.currentTimeMillis();
// her smides kode som der tages tid på
System.out.println("Det tog " + (System.currentTimeMillis()-start) + " ms.");

Jeg fandt også lige en gammel klasse frem som understøtter indlejerede
tidstagninger og pauser - fx.:

int outerTimerID = Timer.start();
while( ... )
{
int innerTimerID = Timer.start();
// her smides noget kode
Timer.pause( innerTimerID );
// kode i dette område gider vi ikke medtage i tidstagningen for
// den indre blok - kun for den ydre
Timer.resume( innerTimerID );
Timer.end( innerTimerID, "beskrivelse af indre operation" );
}
Timer.end( outerTimerID, "beskrivelse af ydre operation" );

Definitionen af Timer klassen har jeg smidt nederst - den skulle
være lige til at bruge.

> 2)
> Hvordan caster jeg indputtet til main classen fra string til int. Mit
> program klades med 2 parameter det ene er en string, den anden er et tal.
> Hvordan modtager jeg tallet, og putter det i en int variabel? Jeg troede at
> dette ville gøre det:
> int ant = (int) args[1];
> Hvad går der galt?

Du kan evt. kigge på nedenstående side (under "Java Programming
Language Basics"):

<http://developer.java.sun.com/developer/onlineTraining/new2java/supplements/2002/mar02.html>

Ulrik Magnusson




/**
<pre>
Klasse til at tage tid.
int timerID = Timer.start();
doSomething();
Timer.end( timerID, "doSomething" );
</pre>
**/
public class Timer
{
private static java.util.Hashtable table = new java.util.Hashtable();
private static java.util.Hashtable pauseTable = new java.util.Hashtable();
private static int idCount = 0;

/**
Starter timer og returnerer id - se end().
*/
public static int start( )
{
Long start = new Long( System.currentTimeMillis() );
int id = idCount++;
table.put( new Integer(id), start );
return id;
}

public static int init()
{
int st = start();
pause( st );
return st;
}

/**
Sætter timer med id 'id' på pause.
Timeren må IKKE være på pause når denne kaldes.
*/
public static void pause( int id )
{
Long pauseStart = new Long( System.currentTimeMillis() );
if( isPaused(id) )
{
throw new RuntimeException( "Timer.pause() : timer " + id + " is already
paused!" );
}
pauseTable.put( new Integer(id), pauseStart );
}

/**
Sætter timer med id 'id' igang fra pause.
Timeren med det givne id SKAL være på pause.
*/
public static void resume( int id )
{
if( !isPaused(id) )
{
throw new RuntimeException( "Timer.resume() : timer " + id + " not paused!"
);
}
long paused = System.currentTimeMillis() - getPauseStart(id);
table.put( new Integer(id), new Long( getStart(id) + paused ) );
pauseTable.remove( new Integer(id) );
}

private static void removePaused( int id )
{
pauseTable.remove( new Integer(id) );
}

private static boolean isPaused( int id )
{
return pauseTable.get( new Integer(id) ) != null;
}

private static long getStart( int id )
{
Long start = (Long)table.get( new Integer(id) );
if( start == null )
{
throw new RuntimeException( "No timer with id: " + id );
}
return start.longValue();
}

private static long getPauseStart( int id )
{
Long paused = (Long)pauseTable.get( new Integer(id) );
return paused.longValue();
}

/**
Stopper timer med id 'id' og skriver 'actionDescription' og tid ud.
*/
public static void end( int id, String actionDescription )
{
long end = System.currentTimeMillis();
if( isPaused( id ) )
{
resume( id );
}
long start = getStart( id );
print( actionDescription, start, end );
}

private static void print( String actionDescription, long start, long end )
{
String str = actionDescription == null? "": actionDescription + " took ";
System.out.println( str + (end - start) + " ms." );
}

public static void main( String[] args )
{
int outerTimerID = Timer.start();
for( int i = 0; i < 10; i++ )
{
int innerTimerID = Timer.start();

Timer.end( innerTimerID, "beskrivelse af indre operation" );
}
Timer.end( outerTimerID, "beskrivelse af ydre operation" );
}
}



Ulrik Magnusson (04-08-2002)
Kommentar
Fra : Ulrik Magnusson


Dato : 04-08-02 22:24

Ulrik Magnusson wrote:

> public static int start( )
> {
> Long start = new Long( System.currentTimeMillis() );
> int id = idCount++; //tik, tik, tik,..
> table.put( new Integer(id), start );
> return id;
> }

NB! Timer klassen er ikke "Thread-safe" - det kan den dog
hurtigt blive ved at gøre start() synchronized.

Ulrik Magnusson


Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste