Почему цикл for добавляет объект одновременно?

1

У меня есть это приложение, у которого есть элемент массива 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);
  • 4
    «Но когда я ввожу только один объект Room, он показывает все элементы массива, добавленные объектом». Разве это именно то , что вложенная for цикла делает ???
  • 0
    Вы уверены, что вводите название комнаты? потому что я не вижу этого в коде
Теги:
for-loop
loops

3 ответа

1
Лучший ответ

Здесь вы заполняете весь массив одной комнатой. 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, что означает, что можно добавить больше комнат.

1

Ошибка в вашем цикле 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);
}

}

}

  • 0
    Что происходит после четвертой итерации?
  • 0
    Ты спрашиваешь про цикл ... ????
Показать ещё 4 комментария
1

Если я получу вопрос правильно, вы говорите, что ваш массив заполняется, когда пользователь вводит только 1 комнату. Если это так, я так думаю.

 for(int i = 0; i < roomsInHouse.length; i++)
    {
    roomsInHouse[i] = nameOfRoom + dimsOfRoom;
    }  

Это ваша проблема, потому что она перебирает весь массив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню