Wczytywanie liczb rzeczywistych z klawiatury do tablicy

0

Witam serdecznie!

Jestem nowym forumowiczem, więc jeśli robię coś źle to proszę o wyrozumiałość i grzeczne upomnienie.
Szkole się w języku Java i dostałem następujące zadanie:

Zadeklaruj tablicę 100 zmiennych typu rzeczywistego. Korzystając z pętli do … while () wczytaj do tablicy dane. Wczytywanie należy zakończyć w momencie gdy tablica zostanie zapełniona lub gdy użytkownik wprowadzi wartość mniejszą od zera.

Kompletnie nie wiem jak to ugryźć, mniej więcej wiem o co chodzi, ale nie potrafię tego do końca zastosować. Czy mógłby mi ktoś w związku z tym odpowiedzieć na pytanie: Jak użyć tej pętli do while żeby to było poprawnie? (byłoby miło gdyby ktoś też wytłumaczył o co chodzi)

PS: Dodam, że korzystam z NetBeans!

Z góy dziękuję i pozdrawiam!

1

Tablicę deklarujesz i tworzysz na początku. Robisz zmienną tymczasową tmp przechowującą wartość wprowadzoną przez użytkownika. W ciele pętli wczytujesz wartość i przypisujesz do kolejnego elementu tablicy. W warunku pętli sprawdzasz czy tablica jest pełna lub czy wartość tmp jest mniejsza od zera.

1

A przed momentem pisałem wczytywanie zawartości pliku tekstowego do tablicy. Łap wzór ;-)

class ReadToArray {
    public static void main(String[] args) {
/       String file = "/home/theacid/.zshrc";
        InputStream inputStream = null;

        try {
            inputStream = new FileInputStream(file);
            byte content[] = new byte[2*1024];
            int readCounting = 0;
            while((readCounting = inputStream.read(content)) > 0) {
                System.out.println(new String(content, 0, readCounting - 1));
            }
        }

        catch(FileNotFoundException exc) {
            System.out.println("File " + file + " not found.");
        }

        catch(IOException exc) {
            System.out.println("Error reading file " + file);
        }

        finally {
            try {
                if(inputStream != null) { inputStream.close(); }
            }

            catch(Exception exc) {
                System.out.println("Error reading file " + file);
            }
        }
    }
}
0
package lis2zaddomnr1;

import java.util.Scanner;
public class Lis2ZadDomnr1 {

    public static void main(String[] args) {
    
       double[] tab1 = new double[100];
       int index = 0;
       
       Scanner wczytaj = new Scanner (System.in);
       
       do {
    tab1[index] = wczytaj.nextDouble();
    index++;
    
    System.out.println ("podaj kolejna liczbe");
    
} while (index < 100 || wczytaj.nextDouble() < 0);
       
      
        
        
    }
    
}

Panowie co tu jest nie tak?
Po pierwsze tu mi wyskakuje, że bezużyteczne

double[] tab1 = new double[100];

Po drugie program nie przerywa się gdy podaje liczbę ujemną.

1
  1. Mi w IntelliJ wyskakuje że zawartość tablicy jest zapisywana ale nigdy nie odczytywana.
  2. w warunku pętli sprawdzasz czy index < 100 i leniwa Java widząc że jest mniejsze nawet nie sprawdza drugiego warunku.
    sprawdź to:
 do {
            System.out.println ("podaj kolejna liczbe");
            tab1[index] = wczytaj.nextDouble();
            index++;
      } while (index < 100 && tab1[index - 1] > 0);

jakby nie patrzeć to @krzysiek050 już to opisał słownie

0

Działa, dzięki wielkie!
Można zamknąć a najlepiej usunąć.

2

Warto zwrócić uwagę na trzy (różniące się!) sposoby odczytania liczby:

  • wczytaj.nextDouble()
  • Double.parseDouble(wczytaj.next())
  • Double.parseDouble(wczytaj.nextLine())
    Pierwsza różnica: klasa Scanner jest zlokalizowana, a klasa Double nie. W konsekwencji, pierwszy sposób oczekuje liczby "z przecinkiem", dwa pozostałe "z kropką".
    Druga różnica, pierwsze dwa sposoby czytają tylko tyle co trzeba - bez Entera kończącego linię. Enter zostaje w buforze klawiatury.
    Po wykonaniu kodu
double x = wczytaj.nextDouble();
String s = wczytaj.nextLine();

zmienna s będzie pusta.

0

Skoro temat jest jeszcze otwarty to skorzystam i zadam pytanie. Jak zapisać w pętli aby użytkownik podawał ile chce wprowadzić liczb do tablicy i następnie żeby mógł wprowadzić daną ilość liczb do tej tablicy?

1
System.out.print("Ile liczb: ");
int ileLiczb = wczytaj.nextInt();
double[] tab = new double[ileLiczb];
for(int i=0; i<ileLiczb; i++){
   tab[i] = wczytaj.nextDouble();
}
0

A jak jednocześnie zadeklarować, że ta tablica ma [100], bo wpisując taką tablicę wcześniej znowu jest bezużyteczna, nie rozumiem tej zależności.

0

Im dłużej patrzę na zdanie "bo wpisując taką tablicę wcześniej znowu jest bezużyteczna" tym bardziej go nie rozumiem.

int ileLiczb = 0;
System.out.print("Ile liczb (od 1 do 100): ");
while(true){
    ileLiczb = wczytaj.nextInt();
    if(ileLiczb >= 1 && ileLiczb <= 100){
        break;
    }
}
double[] tab = new double[100];
...
1

Swoja drogą sam się zacząłem zastanawiać, czemu tak jest, ze wyskakuje informacja, ze tablica nie jest nigdy używana. Może ktoś mnie oświecić?
Chodzi o ten kod:

package lis2zaddomnr1;
 
import java.util.Scanner;
public class Lis2ZadDomnr1 {
 
    public static void main(String[] args) {
 
       double[] tab1 = new double[100];
       int index = 0;
 
       Scanner wczytaj = new Scanner (System.in);
 
       do {
    tab1[index] = wczytaj.nextDouble();
    index++;
 
    System.out.println ("podaj kolejna liczbe");
 
} while (index < 100 || wczytaj.nextDouble() < 0);
 
    }
 
}
1

Komunikat jest zapewne po angielsku, przetłumacz go sobie przy pomocy słownika.

0

No tak, nie zauwazylem, ze tablica nie jest nigdzie wypisywana ;p

0

Witam potrzebuję pilnie pomocy w kodzie!
Nie chciałbym go upubliczniać jako, ze nie jestem jego autorem dlatego miło by było gdyby ktoś się zgłosił prywatnie. Problem dotyczy class i metod, przekształcenie.

Z góry dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1