webForumDet fria alternativet

Illegal start of expression? wth? :s

5 svar · 450 visningar · startad av Broms

BromsMedlem sedan sep. 2002188 inlägg
#1

Har gjort ett program för att hantera datum, kontrollera om de är korrekta, packa dem från heltalen år,månad,datum till en sträng. Sedan en metod för att lägga till en dag, dock utan hänsyn till skottår.. dvs, om datumet är 31 och månaden 1,3 bla bla så blir datumet 1 och månaden++, med undantag för månad 12 då året blir++, och månad&datum blir 1.. i alla fall, stöter på konstiga errors, "illegal start of expression", samt "")" expected".. pejstar koden med pekare på errorsen, obs 2st illegal st of exp, och 1 ")" exp..:

Datum.java

import extra.*;

public class Datum {
	
	private int ar, manad, dag;
//	private String s_ar, s_manad, s_dag;
	
	public Datum(int a, int m, int d){ //skapa ett datum
		ar = a;
		manad = m;
		dag = d;
	}

	/* Metoden ska testa om ett datum är korrekt, den behöver dock inte ta	
	hänsyn till skottår. */
	//public boolean korrektDatum(d_ar, d_manad, d_dag){

	public void korrektDatum(int a_ar, int a_manad, int a_dag){
		
		//int m00;
		String t;
		
		if (a_ar > 0 && a_manad > 0 && a_manad <= 12 && a_dag > 0 && a_dag <=31 ){
			//return true;
			//m00=1;
			t = "Rätt";
			Std.out.println(t);
		}
		else{
			//return false;
			//m00=0;
			t = "Fel";
			Std.out.println(t);
		}
	}

	/* Metoden ökar datumet med en dag. Behöver ej ta hänsyn till skottår. */
	public void adderaDag(){
							
		if (manad == 1 || manad == 3 || manad == 5 || manad == 7 || manad == 8 || manad == 10 || manad == 12 ||){
			
			if(dag == 31){
				dag = 1;
				manad++;
			}
			a_dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");
		}
		
		if(manad == 2){
				
			if(dag == 28){
				dag = 1;
				manad++;
			}
			dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");
		}
			
		if (manad == 4 || manad == 6 || manad == 9 || manad == 11){
			
			if(dag == 30){
				dag = 1;
				manad++;
			}
			dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");
		}
		
		if (manad == 12){
			if (dag == 31){
				dag = 1;
				manad = 1;
				ar++;
			}
			dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");			
		}
	}

	/* Metoden "packar ihop" år, månad och dag och returnerar ett heltal på
	formatet XXXXYYZZ där XXXX är årtalet,
	YY månaden och ZZ dagen, t ex 19961124 */
	//public int packaDatum(){
	public String packaDatum(int a_ar, int a_manad, int a_dag){

		String c_manad = "" + a_manad;
		String c_dag = "" + a_dag; 

		if(a_manad<10){
			c_manad = "0" + a_manad;
		}
		if(a_dag<10){
			c_dag = "0" + a_dag;
		}

		String packatDatum;
		packatDatum = "" + a_ar + c_manad + c_dag; 
		return packatDatum;
		
	}
}

Datumtest.java

import extra.*;

public class Datumtest{

	public static void main (String[] arg) {
	
	int i=1, d_ar, d_manad, d_dag;
		
		do{
			
    		Std.out.print("Vill du köra ett nytt datumtest? 1=ja, 0=nej: ");
    		i = Std.in.readInt();
    		Std.in.skipLine();
    		
    		if (i == 1){    			
        		Std.out.println("Ange datumet enligt ÅÅÅÅ MM DD: ");
        		
        		d_ar = Std.in.readInt();
        		d_manad = Std.in.readInt();
        		d_dag = Std.in.readInt();
        		
        		Datum d1 = new Datum(d_ar, d_manad, d_dag);
        		       		
        		Std.out.println("Datumet på formen XXXXMMDD");
        		Std.out.println(d1.packaDatum(d_ar, d_manad, d_dag));
        		
        		d1.korrektDatum(d_ar,d_manad,d_dag);
        		
        		//if (super.m00 i == 1){
        			adderaDag();
        			Std.out.println(d1.packaDatum(d_ar, d_manad, d_dag));        			
        		//}
     		
        	}
    			
		} while (i == 1);

	} // main
		
} // class

psst, programmet fungerar när jag kommenterar bort metoden adderaDag() i Datum.java, samt antopet till densamme, från Datumtest.java... någon idé?

ViktorMedlem sedan aug. 20021 752 inlägg
#2

För att du ska kunna anroppa en funktion i en annan klass så måste du först skapa ett objekt av den klassen

Datum d=new Datum(d_ar,d_manad,d_dag);

när du har skapat ett nytt objekt av klassen kan du använda den på detta sättet,

d.adderaDag();

/Viktor

BromsMedlem sedan sep. 2002188 inlägg
#3

det har du rätt i, missade det i just det fallet, men Datum klassen går ju i alla fall inte att kompilera, felen med "Illegal start ..." kvarstår, alla 3 felen.. En annan sak också, hur kan man göra om public void korrektDatum() till public boolean korrektDatum()?

Felen finns enligt JCreator här:

import extra.*;

public class Datum {
	
	private int ar, manad, dag;
//	private String s_ar, s_manad, s_dag;
	
	public Datum(int a, int m, int d){ //skapa ett datum
		ar = a;
		manad = m;
		dag = d;
	}

	/* Metoden ska testa om ett datum är korrekt, den behöver dock inte ta	
	hänsyn till skottår. */
	//public boolean korrektDatum(.....){

	public void korrektDatum(int a_ar, int a_manad, int a_dag){
		
		//int m00;
		String t;
		
		if (a_ar > 0 && a_manad > 0 && a_manad <= 12 && a_dag > 0 && a_dag <=31 ){
			//return true;
			//m00=1;
			t = "Rätt";
			Std.out.println(t);
		}
		else{
			//return false;
			//m00=0;
			t = "Fel";
			Std.out.println(t);
		}
	}

	/* Metoden ökar datumet med en dag. Behöver ej ta hänsyn till skottår. */
	public void adderaDag(){
							
/*FEL NR1###*/		if (manad == 1 || manad == 3 || manad == 5 || manad == 7 || manad == 8 || manad == 10 || manad == 12 ||){
			
			if(dag == 31){
				dag = 1;
				manad++;
			}
			a_dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");
		}
		
		if(manad == 2){
				
			if(dag == 28){
				dag = 1;
				manad++;
			}
			dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");
		}
			
		if (manad == 4 || manad == 6 || manad == 9 || manad == 11){
			
			if(dag == 30){
				dag = 1;
				manad++;
			}
			dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");
		}
		
		if (manad == 12){
			if (dag == 31){
				dag = 1;
				manad = 1;
				ar++;
			}
			dag++;
			Std.out.println("Datumet har blitt: " + ar + "." + manad + "." + dag + "!!¤#");			
	/*FEL NR2###*/		}
	/*FEL NR3###*/	}

	/* Metoden "packar ihop" år, månad och dag och returnerar ett heltal på
	formatet XXXXYYZZ där XXXX är årtalet,
	YY månaden och ZZ dagen, t ex 19961124 */
	//public int packaDatum(){
	public String packaDatum(int a_ar, int a_manad, int a_dag){

		String c_manad = "" + a_manad;
		String c_dag = "" + a_dag; 

		if(a_manad<10){
			c_manad = "0" + a_manad;
		}
		if(a_dag<10){
			c_dag = "0" + a_dag;
		}

		String packatDatum;
		packatDatum = "" + a_ar + c_manad + c_dag; 
		return packatDatum;
		
	}
}

Vill ju köra programmet, packa datumet, skriva ut det på nytt och markera om det är korrekt eller inkorrekt, just nu är det Rätt och Fel som skrivs ut, men det skall ges via en boolean i Datum.java. Sedan skall datumet uppdateras med 1 dag, genom kontrollen i medoten adderaDag i Datum.java, och sedan skrivas ut på nytt(med 1 extra dag då.)..

ViktorMedlem sedan aug. 20021 752 inlägg
#4

Börja med att ta bort det sista || vid fel nr 1.
En bit under fel nr 1 finns det en variabel som heter a_dag, den heter i den här klassen dag, samma sak i nästa if sats.

/Viktor

BromsMedlem sedan sep. 2002188 inlägg
#5

tack Viktor, lätt att stirra sig blind på saker ibland... tack ska du ha..det där || hade jag nog aldrig hittat =)

BromsMedlem sedan sep. 2002188 inlägg
#6

har 1 till frågor angående ovanstående.. har fått till så att programmet funkar nu, men OM jag vill hämta ut det nya uppdaterade datumet, och packa det, som jag gjorde med det första datumet, skapat i datumtest, hur går jag till väga?

130 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)