General Output ---Configuration: - Enter number of voters: 3 Voter 1 Thread #1 = 2 Voter 2 Thread #1 = 3 Voter 3 Thread #1 = Voter 1 Thread #3 2 Voter 1 Thread #2 = 2 Voter 2 Thread #3 = 3 Voter 3 Thread #3 = 1[Voting is closed] 2[Voting is closed] 2 Voter 2 Thread #2 Voter 3 Thread #2 %3D 2[Voting is closed] Candidate #1 has 1 vote(s). Candidate #2 has 6 vote(s). Candidate #3 has 2 vote(s). Candidate #2 wins. Process completed. Create a program that allows users to enter the number of voters, then generates 3 Threads. Thread #1 will be named Candidate #1, Thread #2 as Candidate #2 and Thread #3 as Candidate #3. Each of the thread runs an iterative statement that generates "x" random numbers between 1 to 3. If the system generates a value of 1, that means a vote will be counted for Candidate #1; if 2 vote will be added for Candidate #2 otherwise, it will be credited to Candidate#3. Note: 1. "x" (will be based on the "Number of voters") 2. If either of candidates have the same number of votes, then output text must say "No Winner" Sample output: Enter # of voters: 3 Voter 1 Thread #1 = 1 Voter 2 Thread #1 = 3 Voter 1 Thread #3 = 2 Voter 1 Thread #2 = 1 Voter 2 Thread #2 = 3 Voter 3 Thread #1 = 1 [Voting closed] Voter 2 Thread #3 = 2 Voter 3 Thread #2 = 1 [Voting closed] Voter 3 Thread #3 = 2 [Voting closed] Candidate #1 has 4 vote(s) Candidate #2 has 3 vote(s) Candidate #3 _has 2 vote(s) Candidate #1 Wins!!! Thread #1 Finished 1st Thread #3 Finished last
What should be don to achieve the output? because I only have to solve the outlined problems below to finish my code...
import java.util.Random;
import java.util.Scanner;
class prog1 implements Runnable {
private String cName = new String("");
private int x;
public int c1 = 0, c2 = 0, c3 = 0;
public prog1 (String cName, int x){
this.cName = cName;
this.x = x;
}
@Override
public void run(){
Random r = new Random();
int randNum;
for (int i = 1; i <= this.x; i++){
randNum = r.nextInt(x) + 1;
if(i == 3) {
System.out.println(" Voter " + i + " " + cName + " = " + randNum + "[Voting is closed]");
} else
System.out.println(" Voter " + i + " " + cName + " = " + randNum);
if(randNum == 1)
c1++;
if(randNum == 2)
c2++;
if(randNum == 3)
c3++;
}
}
}
public class Quiz2 {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int c1 = 0, c2 = 0, c3 = 0;
for (int x = 0; x < args.length; x++){
System.out.println(args[x]);
}
System.out.print("Enter number of voters: ");
int input = sc.nextInt();
prog1 r1 = new prog1("Thread #1", input);
Thread Candidate1 = new Thread(r1);
Candidate1.start();
prog1 r2 = new prog1("Thread #2", input);
Thread Candidate2 = new Thread(r2);
Candidate2.start();
prog1 r3 = new prog1("Thread #3", input);
Thread Candidate3 = new Thread(r3);
Candidate3.start();
try {
Candidate1.join();
Candidate2.join();
Candidate3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
c1 = r1.c1 + r2.c1 + r3.c1;
c2 = r1.c2 + r2.c2 + r3.c2;
c3 = r3.c3 + r2.c3 + r3.c3;
System.out.println("\nCandidate #1 has " + c1 + " vote(s).");
System.out.println("Candidate #2 has " + c2 + " vote(s).");
System.out.println("Candidate #3 has " + c3 + " vote(s).");
if(c1 > c2) {
if(c1 > c3) {
System.out.println("\nCandidate #1 wins!!!\n");
} else {
System.out.println("\nCandidate #3 wins!!!\n");
}
} else {
if(c2 > c3) {
System.out.println("\nCandidate #2 wins!!!\n");
} else {
System.out.println("\nCandidate #3 wins!!!\n");
}
}
sc.close();
}
}
The given code is not printing the last part of the output i.e which thread finished first and which thread finished last.
Step by step
Solved in 4 steps with 2 images