Har fortsatta problem med mitt program.. det skall kontrollera om ett datum som anges är korrent.. (ej skottår betraktas, dvs alltid 28 dagar i februari).. Problemet ligger i att när datumet kontrolleras anges det som korrekt, sedan adderas en dag i metoden adderaDag(), och är det då en månads sista dag tolkas det som en ny månad och beräknas på nytt som nästa månad, ett inkorrekt datum kan på något vis mittsolkas.. vet inte vart felen finns? hjälpa?
Programmets följdschema är följande:
- Ta in ett datum från skrivbordet i formen (int år, int månad, int dag)
- Skapa ett objekt av klassen datum på det ovan nämnda
- Kontrollera att datumet är korrekt och ge utskrift(rätt lr fel)
- Packa ihop det och skriva ut detta..
- Addera en dag och skriva ut det på nytt i packat tillstånd, hur hämtar jag det uppdaterade värdet??
### KODEN ###
Datum.java:
import extra.*;
public class Datum {
private int ar, manad, dag, m00, check1=0;
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 boolean korrektDatum(int a_ar, int a_manad, int a_dag){
if (a_ar > 0 && (a_manad >= 3 && a_manad <= 12 || a_manad == 1) && a_dag > 0 && a_dag <=31 ){
m00=1;
return true;
}
else if (a_ar > 0 && a_manad == 2 && a_dag > 0 && a_dag < 31){
m00=1;
return true;
}
else{
m00=0;
return false;
}
}
/* Metoden ökar datumet med en dag. Behöver ej ta hänsyn till skottår. */
public void adderaDag(){
if(m00==1){
if (manad == 1 || manad == 3 || manad == 5 || manad == 7 || manad == 8 || manad == 10){
if(dag == 31){
dag = 1;
manad++;
}
else dag++;
Std.out.println("Datumet..År: " + ar + " Månad: " + manad + " Dag: " + dag);
}
else if(manad == 2){
if(dag == 28){
dag = 1;
manad++;
}
else if (dag > 28){
Std.out.println(dag + "/" + manad + "-" + ar + " är inte ett giltigt datum");
check1=1;
}
else {
dag++;
Std.out.println("Datumet..År: " + ar + " Månad: " + manad + " Dag: " + dag);
}
}
else if (manad == 4 || manad == 6 || manad == 9 || manad == 11){
if(dag == 30){
dag = 1;
manad++;
}
else if (dag > 30){
Std.out.println(dag + "/" + manad + "-" + ar + " är inte ett giltigt datum");
check1=1;
}
else{
dag++;
Std.out.println("Datumet..År: " + ar + " Månad: " + manad + " Dag: " + dag);
}
}
else if (manad == 12){
if (dag == 31){
dag = 1;
manad = 1;
ar++;
}
else dag++;
Std.out.println("Datumet..År: " + ar + " Månad: " + manad + " Dag: " + dag);
packaDatum(ar,manad,dag);
}
}else{ if(check1 != 1){Std.out.println(dag + "/" + manad + "-" + ar + " är inte ett giltigt datum");}}
}
/* 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.print("Datumet på formen XXXXMMDD: ");
Std.out.println(d1.packaDatum(d_ar, d_manad, d_dag));
d1.korrektDatum(d_ar,d_manad,d_dag);
if(d1.korrektDatum(d_ar,d_manad,d_dag) == true){
Std.out.println("Rätt!!");
}else Std.out.println("Fel!!");
d1.adderaDag();
//Std.out.println(d1.packaDatum(d_ar, d_manad, d_dag));
}
} while (i == 1);
} // main
} // class
jaja nu har jag löst det iaf.. tog massa timmar och många hårstrån på huvudet färre :p
själva packningen av årtalet, månaden och dagen gjorde jag såhär om någon undrade:
import extra.*;
public class test{
public static void main (String[] arg) {
int tal1,tal2,tal3;
long taltot;
Std.out.print("Skriv in årtalet i formen ÅÅÅÅ MM DD: ");
tal1=Std.in.readInt();
tal2=Std.in.readInt();
tal3=Std.in.readInt();
taltot= (10000*tal1)+(100*tal2)+tal3;
Std.out.print("När vi packar ovanstående årtal blir det: " + taltot);
Std.out.println();
}
}
tänkte det var bra å pejsta detta, så att tråden inte var helt totalt meningslös :p
260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849