У меня есть это приложение, у которого есть элемент массива 4. Мне нужно добавить каждый отдельный объект Room в массив при вводе пользователем, и он может ввести до 4 объектов. Но когда я ввожу только один объект Room, он показывает, что все элементы в массиве добавлены объектом. Могу ли я знать, почему и кто-то может помочь? Благодарю!
import java.util.Arrays;
import java.util.Scanner;
import javax.swing.JOptionPane;
class TestRoom {
public static void main(String [] args)
{
String[] roomsInHouse = new String[4];
int answer;
do{
String nameOfRoom = JOptionPane.showInputDialog(null, "Enter the name of the room");
String dimsOfRoom = JOptionPane.showInputDialog(null, "Enter the dimension of the room in feet L X W X H");
Scanner userInput = new Scanner(dimsOfRoom);
double l = userInput.nextDouble();
double w = userInput.nextDouble();
double h = userInput.nextDouble();
Room roomDetails = new Room(nameOfRoom, l, w, h);
String n = Double.toString(l);
String o = Double.toString(w);
String p = Double.toString(h);
for(int i = 0; i < roomsInHouse.length; i++)
{
roomsInHouse[i] = nameOfRoom + dimsOfRoom;
}
answer = JOptionPane.showConfirmDialog(null, "Input another room?", "Area/Volume calculator", JOptionPane.YES_NO_CANCEL_OPTION);
} while(answer == JOptionPane.YES_OPTION);
for(String j: roomsInHouse)
{
System.out.println(j);
}
}
}
Хорошо, я только что изменил свое кодирование и благодаря вам, ребятам, я понимаю, что пошло не так. Ура!
int counter = 0;
roomsInHouse[counter++] = nameOfRoom + dimsOfRoom;
answer = JOptionPane.showConfirmDialog(null, "Input another room?", "Area/Volume calculator", JOptionPane.YES_NO_CANCEL_OPTION);
} while(answer == JOptionPane.YES_OPTION && counter < 4);
Здесь вы заполняете весь массив одной комнатой. roomsInHouse.length
всегда возвращают 4
for(int i = 0; i < roomsInHouse.length; i++)
{
roomsInHouse[i] = nameOfRoom + dimsOfRoom;
}
Вы можете изменить свой код соответственно
String[] roomsInHouse = new String[4];
int n = 0;
int answer;
а затем:
roomsInHouse[n++] = nameOfRoom + dimsOfRoom;
После этого проверьте только n < 4
, что означает, что можно добавить больше комнат.
Ошибка в вашем цикле for с циклом do-while......
Поскольку u итерирует "комнатыInHouse.lenght" раз для каждого взаимодействия цикла do-while..... массив переписывается для каждого взаимодействия.
Сделайте следующую коррекцию для своего кода....
import java.util.Arrays;
import java.util.Scanner;
import javax.swing.JOptionPane;
class TestRoom {
public static void main(String [] args)
{
String[] roomsInHouse = new String[4];
int answer;
int counter=0;
do{
String nameOfRoom = JOptionPane.showInputDialog(null, "Enter the name of the room");
String dimsOfRoom = JOptionPane.showInputDialog(null, "Enter the dimension of the room in feet L X W X H");
Scanner userInput = new Scanner(dimsOfRoom);
double l = userInput.nextDouble();
double w = userInput.nextDouble();
double h = userInput.nextDouble();
Room roomDetails = new Room(nameOfRoom, l, w, h);
String n = Double.toString(l);
String o = Double.toString(w);
String p = Double.toString(h);
roomsInHouse[counter] = nameOfRoom + dimsOfRoom;
counter++;
answer = JOptionPane.showConfirmDialog(null, "Input another room?", "Area/Volume calculator", JOptionPane.YES_NO_CANCEL_OPTION);
} while(answer == JOptionPane.YES_OPTION);
for(String j: roomsInHouse)
{
System.out.println(j);
}
}
}
Если я получу вопрос правильно, вы говорите, что ваш массив заполняется, когда пользователь вводит только 1 комнату. Если это так, я так думаю.
for(int i = 0; i < roomsInHouse.length; i++)
{
roomsInHouse[i] = nameOfRoom + dimsOfRoom;
}
Это ваша проблема, потому что она перебирает весь массив.
for
цикла делает ???