webForumDet fria alternativet

få ut variabeln ur if-sats/for loop osv

Javaur Java

10 svar · 407 visningar · startad av kobranturre

Medlem sedan maj 2004693 inlägg
Frågan#1
<?php
$i = 2;
if ($i == 2){
$h = 3;
}
echo $h;
?>

Detta skulle ge utskriften 3.

men om jag använder java

int i = 2;

if (i == 2){
int h = 3;
}

System.out.println(h);

Detta skulle ge en error. Rätt kod är istället

int i = 2;

if (i == 2){
int h = 3;
System.out.println(h);
}

Men ibland så behöver/måste utskriften vara utanför if eller foor loppen eller what ever. Finns det ngt sätt o fixa det?

Medlem sedan nov. 20022 355 inlägg
#2
int i = 2;
int h = 0;
if (i == 2){
    h = 3;
}
System.out.println(h);
Medlem sedan aug. 20021 752 inlägg
#3

En deklaration i Java är bara giltig (finns bara) innom samma scope (och sub scope) där den är deklarerad.
Ett scope kan man enkelt säga är det kod område som börjar med en { och slutar med }.

public class ScopeTest
{
	private int val1=0;
	public static void main(String[] argv)
	{
		int val2=10;
		for(int val3=0;val3<10;val3++)
		{
			System.out.println(val1+", "+val2+","+val3);
		}
		System.out.println(val1+", "+val2);
		printVal1();
	}
	
	private void printVal1()
	{
		System.out.println(val1);
	}
}

Val1 är altså en global variabel för denna klass.
Val2 gäller för hela funktionen main.
Val3 gäller bara i for lopen.

/Viktor

Medlem sedan maj 2004693 inlägg
#4

visste inte att man kunde ha så där (val1).

Det är en sak jag inte fattar. Exakt vad gör/säger/betyder

public static void main(String[] args){

?

(du skrev argv....var det ett litet slarvmisstag eller finns den också?)

Medlem sedan sep. 2001961 inlägg
#5

kobranturre skrev:

visste inte att man kunde ha så där (val1).

Det är en sak jag inte fattar. Exakt vad gör/säger/betyder

public static void main(String[] args){

?

(du skrev argv....var det ett litet slarvmisstag eller finns den också?)

För att svara på den sista frågan först.... Det spelar ingen roll vad man kallar sjävla argumentarrayen. Det är bara ett namn och även om jag skriver public String metod(String a) eller public String metod(String b) så har metoderna samma signatur och är alltså samma metod trots att namnet på variabeln är olika.

Vad public static void main(String[] args) gör är följande:

När du startar ett javaprogram så söker JVM:en efter en metod med just signaturen public static void main(String[] args) för att se vad den skall göra. Eftersom metoden är statisk så behöver man inte göra någon instans av klassen utan kan föra från start.

Medlem sedan mars 20034 471 inlägg
#6

kobranturre skrev:

... Det är en sak jag inte fattar. Exakt vad gör/säger/betyder

public static void main(String[] args){

?
...

Förtydligande till Limes beskrivning:

En klass (Aklass) som ska kunna köras med: java Aklass
måste ha en public metod som heter main, är static och void och tar som indata en String-array. Däremot är String-arrayen ett argument vilket som helst, så vad det heter bestämmer du. När jag har en mainmetod som inte är avsedd att ta argument brukar jag definiera den så här:

public static void main (String[] notUsed) {....}

Det funkar hur bra som helst.

public - den syns och kan anropas utanför klassen, dvs av vilken klass som helst och (i fallet med main) även från kommandoraden.

static - det är en klassmetod och inte en instansmetod. (Vilket kortfattat uttryckt innebär att varje instans av Aklass kommer att använda samma metod och du behöver inte ens en instans för att anropa den.)
Exempel: Det är en static metod i Integer som används när du gör om en String som "2" till heltalet 2 mha Integer.parseInt("2"). Då har du ingen specifik Integer, bara själva klassen.

void - returnerar ingenting.

Exempel på vad den där String-arrayen gör:

public class Aklass {

  public static void main(String[] args) {
     if (args.length == 0) System.out.println("No args used!");
     else System.out.print(args.length + " args used! ");
     if (args.length == 5) System.out.println(args[4]);
  }

}

java Aklass ==> No args used!
java Aklass OK? ==> 1 args used!
java Aklass Flera arg kommer efter varann ==> 5 args used! varann

-------
Brasklapp: Har för mig att man kollar längden på en array med length(). Kan ev heta något annat, det var ett tag sedan jag gjorde det. Men det finns en sån metod som kollar det.

RED: Exemplet - men inte brasklappen - redigerat med anledningen av rättelsen nedan. Lämnade brasklappen för kontinuitetens skull.

Medlem sedan juni 20008 205 inlägg
#7

Nej, det är ett fält och inte en metod, d.v.s. args.length och inte args.length() :)

Medlem sedan maj 2004693 inlägg
#8

kan väl ställa frågan på en redan befintlig tråd :)

Jag läser just nu Thinking in Java (pdf) där han bratar mycket om java 1.0 och 1.1. Så jag gissar att bokenb är väldigt gammal då jag har 1.4

Så har ni några boktips? Helst svenska :)

Medlem sedan mars 20034 471 inlägg
#9

spango skrev:

Nej, det är ett fält och inte en metod, d.v.s. args.length och inte args.length() :)

Tack, spango! :D

Jag har redigerat exemplet - men inte brasklappen - i inlägget. Lämnade brasklappen för kontinuitetens skull.

kobrantkurre - Jag tror inte att det är någon bra idé att läsa i en bok om så tidiga versioner. Har för mig att någon större förändring genomfördes någongång mellan 1.1.x och 1.2.1

RED: Skrivfel av olämpligt slag!

Medlem sedan maj 2004693 inlägg
#10

2.1? Visste inte ens att den fanns

jag kör

J2SE 1.4.2 SDK. Bör jag byta till ngn annan?

Medlem sedan juni 20008 205 inlägg
#11

1.4.* är den senaste stabila JSDK:n, det finns en beta för 1.5 ute också, men den innefattar en del nyheter som kanske kan krångla till det lite. Kör med 1.4, Java 2 börjar räknas från JSDK >=1.2...

263 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
126 ms — hämta forumlista (db)
126 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)