JMV12 JMV12 - 7 months ago 32
Java Question

Print timed thread

I'm working on the following assignment:


Consider a shared counter whose values are non-negative integers,
initially zero. A time-printing thread increments the counter by one
and prints its value each second from the start of execution. A
message-printing thread prints a message every fifteen seconds. Have
the message-printing thread be notified by the time-printing thread as
each second passes by. Add another message-printing thread that prints
a different message every seven seconds. Such addition must be done
without modifying the time-printing thread implementation.

Have all involved threads share the counter object that is updated by
the time-printing thread every second. The time-printing thread will
notify other threads to read the counter object each time it updates
the counter, then each message-printing thread will read the counter
value and see if its assigned time period has elapsed; if so, it will
print its message.


import java.lang.Class;
import java.lang.Object;

public class Main2 {

public static void main(String... args)
{
Thread thread = new Thread()
{
public void run()
{
int x = 0;
while(true)
{
x = x + 1;
System.out.print(x + " ");
if(x%7 == 0)
{
System.out.println();
System.out.println("7 second message");
}
if(x%15 == 0)
{
System.out.println();
System.out.println("15 second message");
}
try { Thread.sleep(1000); }
catch (Exception e) { e.printStackTrace(); }
}
}
};
thread.start();
}
}


It is outputting :

1
7 second message

15 second message
2
7 second message

15 second message
3
7 second message

15 second message
4
7 second message

15 second message
5
7 second message

15 second message


and so on...

When I need it to output:

1 2 3 4 5 6
7 second message
7 8 9 10 11 12 13
7 second message
14
15 second message
15 16 17 18 19 20
7 second message
21 22 23 24 . . .


Am I doing something wrong in the while loop regarding the if statements or is it something deeper?

Answer

You have to remove the ";" after if conditions.

  if(x%7 == 0);

and

 if(x%15 == 0);

Check the following code

public static void main(String... args) {
        Thread thread = new Thread() {
            public void run() {
                int x = 0;
                while (true) {
                    x = x + 1;
                    System.out.print(x + " ");
                    if (x % 7 == 0)
                    {
                        System.out.println();
                        System.out.println("7 second message");
                    }
                    if (x % 15 == 0)
                    {
                        System.out.println();
                        System.out.println("15 second message");
                    }
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        thread.start();
    }

My output for this as follows

1 2 3 4 5 6 7 
7 second message
8 9 10 11 12 13 14 
7 second message
15 
15 second message
16 17 18 19 20 21 
7 second message
22 23 24 25 26 27 ...