• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z pętlą for przy tablica jednowymiarowych - banał

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 26 lipca 2018 w Java przez Java_na _Jawie Nowicjusz (120 p.)

Cześć dopiero co zacząłem zabawę z java (w ogóle z programowaniem). Napisałem krótki i dość nieskomplikowany skrypt, który wykorzystuje pętle for w celu wpisania do kolejnego elementu tablicy począwszy od 0-zerowego kolejnej zmiennej typu string. Nie rozumiem dlaczego przy pierwszej iteracji nie mam możliwości wpisania 0zerowego elementu do tablicy. Dla jasności wstawiam kod. Pewnie powód jest banalny, ale tak jak wspominałem to moje pierwsze kroki w programowaniu. Dzięki za pomoc! ;)

import java.util.Scanner;

public class dimTask{
 public static void main(String[] args){
 
  Scanner read = new Scanner(System.in);
  System.out.println("Podaj rozmiar tablicy");
 
  int count = read.nextInt();
  String przyrostek;
  String imie;
  String tablica[] = new String[count];
  System.out.println("Zapełnij " + count + "elementową tablicę imionami");
  
  for (int i = 0; i < count; i++){
 
   if(i == 0){
    przyrostek = "sze";
   }
   else if(i == 1){
    przyrostek = "gie";
   }
   else if(i == 2){
    przyrostek = "cie";
   }
   else{
    przyrostek = "te";
   }
   System.out.println("Wpisz " + (i + 1) + przyrostek + " imię");
 
   tablica[i] = read.nextLine();

   System.out.println("Witaj " + tablica[i]);
  }
 }  
}  

 

2 odpowiedzi

+1 głos
odpowiedź 26 lipca 2018 przez Mateusz51 Nałogowiec (28,180 p.)
problem jest z tym ze nextInt od scanera nie czyści bufora i w 31 linijce do tablicy[0] wpisywany jest pusty znak. Aby to naprawic za nextInt wstaw nextLine
komentarz 26 lipca 2018 przez Asertywny Mądrala (5,430 p.)
Skąd wziął się w buforze ten pusty znak?
1
komentarz 26 lipca 2018 przez Mateusz51 Nałogowiec (28,180 p.)
nextInt pobiera tylko stringa związanego z liczba, aby wprowadzi musisz kliknąć enter czyli znak nowej lini którego nextInt nie czyta. Przez co nextLine czyta Ci ten enter i uznaje ze to koniec.
komentarz 27 lipca 2018 przez Wiciorny Ekspert (269,710 p.)

Kolega jak coś radzi; to proszę rzetelnie, żeby potem bzdur nie powielano 

nextInt pobiera "tylko stringa związanego z liczbą" -> nie pobiera stringa, 

 

nawet jeśli domyślnie Scanner czyta "wejście String" to Scanner : Scans the next token of the input as an int ( tokeny to nie Stringi nie ma w tym jednoznaczności, Scanner wcale nie bazuje na Stringu tylko na tokenach ). 

public int nextInt()

czyta i zwraca inta... 

 

komentarz 27 lipca 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Widze ze kolega ma taki charakter ze jak może się do czegoś przyczepić to się przyczepi, wspolczuje.
komentarz 27 lipca 2018 przez Wiciorny Ekspert (269,710 p.)
edycja 27 lipca 2018 przez Wiciorny
muszę, bo potem Junior przychodzi mi na rozmowe ... i takie  głupoty gada ... serio programowanie to nie klepanie kodu bez zrozumienia. I nietraktuj tego broń boże źle, po prostu sam dawno temu też  jakby olewałem takie sprawy, ale uwierz mi to jak się wysławiasz na dany temat świadczy o tym jak to rozumiesz -> naprwdę po prostu z autopsji ja się nie raz przejechałem
komentarz 27 lipca 2018 przez Mateusz51 Nałogowiec (28,180 p.)
A w jakiej firmie pracujesz?
0 głosów
odpowiedź 26 lipca 2018 przez Wiciorny Ekspert (269,710 p.)
edycja 27 lipca 2018 przez Wiciorny

 int count = read.nextInt();

w odróżnieniu od ... nextLine(), pozostajesz w tej samej lini, stąd po wczytaniu rozmiaru tablicy- dalej jesteś w tej lini wczytująć tzw puste pole... 

import java.util.Scanner;


public class dimTask{
    public static void main(String[] args){

        Scanner read = new Scanner(System.in);
        System.out.println("Podaj rozmiar tablicy");

        int count = read.nextInt();

        String przyrostek;
        String imie;
        String tablica[] = new String[count];
        System.out.println("Zapełnij " + count + "elementową tablicę imionami");
        read.nextLine();
        for (int i = 0; i < count; i++){

            if(i == 0){
                przyrostek = "sze";
            }
            else if(i == 1){
                przyrostek = "gie";
            }
            else if(i == 2){
                przyrostek = "cie";
            }
            else{
                przyrostek = "te";
            }
            System.out.println("Wpisz " + (i + 1) + przyrostek + " imię");
            tablica[i] = read.nextLine();

            System.out.println("Witaj " + tablica[i]);
        }
    }
}

Teraz program działa poprawnie, po pobraniu inta- po prostu zostajesz w tej samej lini, aby to naprawić musisz dać znać, że w obecnej chwili już nic nie ma w starej lini i nic nie bedzie czytane

więc przestawiasz wskaźnik na następną linie 

  read.nextLine(); // 16 linijka

 

Podobne pytania

0 głosów
1 odpowiedź 2,179 wizyt
0 głosów
3 odpowiedzi 21,667 wizyt
0 głosów
2 odpowiedzi 1,298 wizyt
pytanie zadane 15 lutego 2018 w C i C++ przez Baśka Nowicjusz (150 p.)

92,555 zapytań

141,402 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...