2016-10-23 4 views
1

Мне нужно создать программу, в которой вы дадите пользователю ввести десятичное число, и оно будет храниться в массиве.Длина динамического массива

Проблема заключается в том, что я должен позволить пользователю ввести количество чисел, которое он хочет, и все это будет храниться в одном массиве.

После ввода каждого пользователя программа спросит, хочет ли пользователь добавить еще десятичное число. Как сделать размер массива величиной числа, которое вводит пользователь?

Это то, что я получил до сих пор:

import java.util.Scanner; 

public class Uppgift4 { 

    public static void main(String[] args) { 
     float[] array = new float[1000]; 

     Scanner scanner = new Scanner(System.in); 

     int counter= 0; 

     int val; 

     float inTal = 0; 

     boolean loop = true; 

     while(loop){ 
      System.out.print("Skriv in ett decimaltal: "); 
      inTal = scanner.nextFloat(); 
      array[counter] = inTal; 
      counter++; 


      System.out.print("Vill du skriva in ett till tal? ja=1 nej=2 : "); 
      val = scanner.nextInt(); 

      if(val == 2) 
       loop = false; 
     } 

     for(int i = 0; i<=array.length; i++){ 
      System.out.println(array[i]); 
     } 

    } 

} 

Но, как вы видите, программа будет выводить много 0-х годов, так как много массива, вероятно, будет пустым. (Некоторые из моих имен переменных в шведском)

+1

Лучше использовать ArrayList, который увеличивает динамический размер его – karelss

ответ

1

Вы можете использовать только ArrayList.

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

Scanner in = new Scanner(System.in); 
ArrayList<Double> arr = new ArrayList<Double>(); 

while (in.hasNextDouble()) { 
    arr.add(in.nextDouble()); 

    System.out.println("Continue? y = 1, n = 2"); 
    if (in.hasNextInt() && in.nextInt() == 2) // assumes any non-2 answer is "Yes" 
     break; 
} 

Для краткости я опускаю код взаимодействия с пользователем.

Кроме того, я использую Double s вместо float, так как Double s имеют большую точность.

+0

Спасибо! Думаю, тогда я пойду с арраистом! – Svante

-1

вы можете использовать arrayList, поскольку он имеет свойство динамически изменять его размер в соответствии с вводом.

import java.util.*; //package 
ArrayList<Double> obj=new ArrayList<Double>(); 

по методу OBJ вызова

obj.add(inTal); 

Остальная часть кода аналогична просто добавьте эти строки. Надеюсь, это сработает ... !!!

+0

Что делает ваш ответ, что делает его не моим дубликатом? – Charles

0

Вы можете задать пользователю, сколько цифр они будут вводить до создания массива. Сохраните это значение в переменной int, затем создайте массив и размер этого размера. Таким образом, пользователь может ввести количество желаемых значений.

Недостатком этого является то, что если пользователь меняет свое мнение, на самом деле нет способа изменить размер массива после факта (помимо создания нового массива). Итак, если вы хотите, чтобы ваш код работал независимо от того, вы могли бы просто использовать ArrayList.

+0

Спасибо! Это очень помогло :) – Svante

Смежные вопросы