I am working on a project to read a text from a note pad and store its content in a dynamic array, then display the list to the user for him to choose a line, then saving the data related to the chosen region in a binary file, then read the binary file and store its content in a data structure of type “Linked List” and save the content of the data structure into a text file.
I created 3 classes two of them are the dynamic array and the linked list. I want to call the dynamic array in a fourth class but it says that the array is not visible even though I declared it as public, and all of my classes are in the same package.
public class Array {
private int length = DEFAULT_LENGTH;
private int eltsNbr;
public Country[] c;
public static final int DEFAULT_LENGTH = 4;
public Array(int length) {
this.length = length;
this.eltsNbr = 0;
this.c= new Country[DEFAULT_LENGTH];
}
public Array() {
this(DEFAULT_LENGTH);
}
public Array(Array a) {
this(a.length);
for (int i = 0; i < a.eltsNbr; i++)
this.c[i] = a.c[i];
this.eltsNbr = a.eltsNbr;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public Country[] getCountries() {
return c;
}
public int getEmptyLength() {
return this.length - this.eltsNbr;
}
public String toString() {
String str = this.eltsNbr+"Countries"+"\n" ;
if (this.isEmpty())
return str;
for (int i = 0; i < this.eltsNbr; i++)
str += "Country [ "+" CountryName = " + c[i].getCountry() + " " + "code= "+c[i].getCode()+ " " + "region = " + c[i].getRegion() + " " + "population = " + c[i].getPopulation () + "]" + "\n";
return str;
}
public boolean isFull() {
return this.eltsNbr == this.length;
}
public boolean isEmpty() {
return this.eltsNbr == 0;
}
public void extend (int additionalLength) {
Country[] c1 = new Country[this.length + additionalLength];
for(int i = 0; i < this.eltsNbr; i++)
c1[i] = this.c[i];
this.c = c1;
this.length = this.length + additionalLength;
}
public boolean insertAtPosition(Country value, int pos) {
if (pos > this.eltsNbr || pos < 0)
return false;
if (this.isFull())
this.extend(DEFAULT_LENGTH) ;
for (int i = this.eltsNbr; i > pos; i--)
this.c[i] = this.c[i - 1];
this.c[pos] = value;
this.eltsNbr++;
return true;
}
public boolean insertAtHead(Country value) {
return this.insertAtPosition(value, 0);
}
public boolean deleteAtPosition(int pos) {
if (this.isEmpty())
return false;
if (pos >= this.eltsNbr || pos < 0)
return false;
for (int i = pos; i < this.eltsNbr - 1; i++)
this.c[i] = this.c[i + 1];
this.eltsNbr--;
return true;
}
public static void main(String[] args) throws IOException {
//
}
}
public static void main(String[] args) throws IOException{
Array a1 = new Array();
}
}
This is the Country class:
import java.io.IOException;
public class Country {
private String country;
private String code;
private String region;
private int population;
public static final String DEFAULT_COUNTRY = "Lebanon";
public static final String DEFAULT_CODE = "LBN" ;
public static final String DEFAULT_REGION = "Middle East & North Africa";
public static final int DEFAULT_POPULATION = 6855713;
public Country(String country, String code, String region, int population) {
super();
this.country = country;
this.code = code;
this.region = region;
this.population = population;
}
public Country() {
this(DEFAULT_COUNTRY, DEFAULT_CODE, DEFAULT_REGION, DEFAULT_POPULATION);
}
public Country(Country a) {
this(a.country, a.code, a.region, a.population);
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
@Override
public String toString() {
return "Country [country=" + country + ", code=" + code + ", region=" + region + ", population=" + population
+ "]";
}
public static void main(String[] args) {
}
}
this is the linked list class:
class Element{
Country data;
Element next;
Element previous;
Element (Country c){
data = c;
next = null;
}
}
private Element head = null;
private Element rear = null;
private int length = 0;
public boolean isEmpty() {
return this.length == 0;
}
public LinkedList() {
this.head = null;
this.rear = null;
this.length = 0;
}
public LinkedList(LinkedList dList) {
this();
if(dList.isEmpty())
return;
Element cur = dList.head;
Element tmp = new Element(cur.data);
head = rear = tmp;
cur = cur.next;
length++;
while(cur != null) {
tmp = new Element(cur.data);
rear.next = tmp;
tmp.previous = rear;
rear = tmp;
cur = cur.next;
length++;
}
}
public int getLength() {
return this.getLength();
}
public String toString() {
Element cur = this.head;
String str = this.length+"Countries"+"\n" ;
if (this.isEmpty())
return str;
while (cur != null) {
str += "Country " + cur.data.getCountry() + " " + "Code = " + cur.data.getCode()+ " " + "Region " + cur.data.getRegion() + " " + "Population = "+ cur.data.getPopulation() + " | ";
cur = cur.next;
}
return str;
}
public void insertAtHead(Country value) {
Element tmp = new Element(value);
// case on an empty list
if(this.isEmpty()) {
head = rear = tmp;
head.previous = null;
rear.next = null;
}else {
//case of a non-empty list
tmp.next = head;
head.previous = tmp;
tmp.previous = null;
head = tmp;
}
this.length++;
}
public void insertAtRear(Country value) {
Element tmp = new Element(value);
// case on an empty list
if(this.isEmpty()) {
head = rear = tmp;
head.previous = null;
rear.next = null;
}else {
//case of a non-empty list
tmp.previous = rear;
rear.next = tmp;
tmp.next = null;
rear = tmp;
}
this.length++;
}
public void delete(Country value) {
Element cur = this.head;
if(this.isEmpty())
return;
//case of deleting the head
if(this.head.data == value) {
this.head.next = this.head;
}
//case of deleting the rear
if(this.rear.data == value) {
this.rear.previous = this.rear;
}
//general case
while(cur != null && cur.data != value) {
cur = cur.next;
}
cur.previous.next = cur.next;
cur.next.previous = cur.previous;
}
public void deleteAllElements() {
this.length = 0;
this.head = null;
this.rear = null;
}
}
The problem is you have imported an incorrect class. Please look at your import statement in the class Testing.
import java.lang.reflect.Array;
please remove that import statement.Then you are good to go.