1

so the question basically says to Use a for loop to add 10 Circles to the ArrayList each with a random radius in the range of 2-5 and Print a table of all of the Circles in the ArrayList. You can use System.out.println(String.format("%.3f", this.getRadius)); to print the circle dimensions to 3 decimal places. but how does this work.

public class CirclesDriver
{
    public static void main(String[] args) {
        Random rand = new Random();
        // ** Variables constants and objects **
        Scanner scanner = new Scanner(System.in);
        ArrayList<Circle> circles = new ArrayList<>();

        // ** load the array list with circles **
        for (int i = 0; i <= 10; i++) {
            Circle circle = new Circle();
            double radius = rand.nextDouble(5) + 2;

        }
        
        // print the whole list
        
        System.out.println("--------------------------------\n");
        
        // ** Make sure your Circle class and ArrayList work with the following driver code **
        System.out.println();
        
        Circle c1 = new Circle();
        System.out.println("C1: " + c1.getID());
        System.out.println("Radius: " + c1.getRadius());
        System.out.println("--------------------------------\n");
        
        c1.setRadius(1.5);
        System.out.println("C1: " + c1.getID());
        System.out.println("Radius: " + c1.getRadius());
        System.out.println("Area: " + c1.getArea());
        System.out.println("--------------------------------\n");
        
        circles.get(3).setRadius(2.2);
        System.out.println("C1: " + circles.get(3).getID());
        System.out.println("Radius: " + circles.get(3).getRadius());
        System.out.println("Diameter: " + circles.get(3).getDiameter());
        System.out.println("--------------------------------\n");
        
        Circle c2 = circles.remove(9);
        System.out.println("C2: " + c2.getID());
        System.out.println("Radius: " + c2.getRadius());
        System.out.println("Circumference: " + c2.getCircumference());
        System.out.println("--------------------------------\n");
        
        // ** output
        
        // ** closing message **
        System.out.println("\nend of program");
Rambo2022
  • 11
  • 1

2 Answers2

1

Based on the question, given code doesn't work. Here is the complete code and corresponding output.

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class CirclesDriver {
    public static void main(String[] args) {
        Random rand = new Random();
        // ** Variables constants and objects **
        Scanner scanner = new Scanner(System.in);
        ArrayList<Circle> circles = new ArrayList<>();

        // ** load the array list with circles **
        for (int i = 1; i <= 10; i++) {
            String id = "C" + i;
            double random = rand.nextDouble();
            double radius = 2 + (random * (5 - 2));
            Circle circle = new Circle(id, radius);
            circles.add(circle);
        }

        // print the whole list

        System.out.println("--------------------------------\n");

        // ** Make sure your Circle class and ArrayList work with the following driver code **
        for(int i=0; i<circles.size(); i++) {
            Circle circle = circles.get(i);
            System.out.println();
            System.out.println("C1: " + circle.getId());
            System.out.println("Radius: " + String.format("%.3f", circle.getRadius()));
            System.out.println("Diameter: " + String.format("%.3f", circle.getDiameter()));
            System.out.println("Circumference: " + String.format("%.3f", circle.getCircumference()));
            System.out.println("Area: " + String.format("%.3f", circle.getArea()));
            System.out.println();
        }
    }
}

class Circle {
    private String id;
    private double radius = 0;

    public Circle(String id, double radius) {
        this.id = id;
        this.radius = radius;
    }

    public String getId() {
        return id;
    }

    public double getRadius() {
        return radius;
    }

    public double getDiameter() {
        return radius * 2;
    }

    public double getArea() {
        return 2 * 3.14 * radius * radius;
    }

    public double getCircumference() {
        return 2 * 3.14 * radius;
    }
}

Output

--------------------------------


C1: C1
Radius: 4.740
Diameter: 9.481
Circumference: 29.770
Area: 141.121


C1: C2
Radius: 3.677
Diameter: 7.353
Circumference: 23.089
Area: 84.886


C1: C3
Radius: 4.333
Diameter: 8.665
Circumference: 27.209
Area: 117.888


C1: C4
Radius: 4.592
Diameter: 9.184
Circumference: 28.838
Area: 132.423


C1: C5
Radius: 4.468
Diameter: 8.937
Circumference: 28.062
Area: 125.393


C1: C6
Radius: 3.024
Diameter: 6.047
Circumference: 18.988
Area: 57.413


C1: C7
Radius: 3.628
Diameter: 7.256
Circumference: 22.783
Area: 82.656


C1: C8
Radius: 2.086
Diameter: 4.173
Circumference: 13.103
Area: 27.339


C1: C9
Radius: 2.447
Diameter: 4.894
Circumference: 15.368
Area: 37.610


C1: C10
Radius: 4.301
Diameter: 8.602
Circumference: 27.010
Area: 116.172
  • System.out.println(String.format("%.3f", this.getRadius)); Circle Radius Area Diam Circ 1054 3.291 34.022 6.582 20.677 1055 3.434 37.038 6.867 21.574 1056 2.491 19.491 4.982 15.650 1057 4.406 60.989 8.812 27.684 1058 3.847 46.499 7.694 24.173 1059 4.074 52.155 8.149 25.601 1060 4.166 54.518 8.332 26.174 1061 4.067 51.966 8.134 25.554 1062 3.092 30.027 6.183 19.425 1063 4.686 68.994 9.373 29.445 ---------------------------- we should output this table using the above code but i dont know how it works – Rambo2022 Dec 07 '22 at 22:30
0

Pass radius to constructor

Simpler to define a constructor that takes the radius as an argument.

Define your Circle class. If the main purpose of your class is to communicate data transparently and immutably, write your class as a record. With a record, the compiler by default implicitly creates the constructor, getters, equals & hashCode, and toString. You can declare a record locally (within a method), or separately.

record Circle ( double radius ) {}

A DoubleStream can create a series of randomly generated double values. (The following code is untested)

List< Circle > circles = 
    ThreadLocalRandom
        .current()  // Returns a `ThreadLocalRandom `. 
        .doubles(   
            10L,    // streamSize
            2.0d,   // randomNumberOrigin
            5.0d    // randomNumberBound
         )          // Returns a `DoubleStream`. 
        .mapToObj( double d -> return new Circle( d ) ) // Generates a stream of `Circle` objects. 
        .toList()   // Returns a `List`.
;

We might be able to reduce .mapToObj( double d -> return new Circle( d ) ) with .mapToObj( Circle :: new ), a method reference referring to the constructor.

For output, loop the list. Add methods to the Circle class to return diameter and circumference.

Basil Bourque
  • 303,325
  • 100
  • 852
  • 1,154