Problém s sc.nextLine() / if() – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s sc.nextLine() / if() – Java – Fórum – Programujte.comProblém s sc.nextLine() / if() – Java – Fórum – Programujte.com

 

Eda
~ Anonymní uživatel
4 příspěvky
25. 11. 2015   #1
-
0
-

Ahoj,
mám část kódu:
.....
Scanner sc = new Scanner(System.in);                                            
    String textik1 = sc.nextLine();
    System.out.println("hodnota: " + textik1);
    if(textik1 == "t") {
.....
jehož cílem by mělo být získání vstupu od uživatele (textového stringu) a podle jeho hodnoty další rozhodování. Problém je, že takto to správně vypíše vloženou hodnotu (třeba to "t", ale už to nedělá podmínku, která je s "t" spojena a přejde to rovnou do else (jakoby když nejsou splněny podmínky). Je mi jasné, že to je nějaká blbost - někde bude enter, nebo tak, ale nemohu na to přijít. Poradíte?

Nahlásit jako SPAM
IP: 78.136.145.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
25. 11. 2015   #2
-
0
-

Ježíši, proboha nauč se pořádně String a java.lang.Object

String není primitivní datový typ a tudíž na něj nelze použít pro porovnání   ==

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)

Správně je použít metodu equals

v tvém případě tedy

.....
 Scanner sc = new Scanner(System.in);                                            
     String textik1 = sc.nextLine();
     System.out.println("hodnota: " + textik1);
     if(textik1.equals("t")) {

 .....
Nahlásit jako SPAM
IP: 217.112.161.–
EdaBeginner
~ Anonymní uživatel
2 příspěvky
25. 11. 2015   #3
-
0
-

Díky,

takhle to skutečně funguje, nakonec jsem se tam tedy dohrabal taky, jenomže jsem zjistil, že ani ten equal mi nestačí. Totiž to "t" tam není samo a já bych pak potřeboval samostatně vytáhnout ještě ten text co je za ním. Tudíž jsem na to chtěl jít přes  subString, že bych nejdříve řekl, ať mi najde, jestli je někde ve stringu písmeno t a za ním mezera:

if(textik1.subSubstring(0,2)equals("t ")) {

a pak že bych mu řekl, ať mi řekne zbytek stringu za písmenem t

if(textik1.subSubstring(2)) {

jenže von na mě furt "error: cannot find symbol", případně "error: cannot return a value from method whose result type is void". Takže se na to dnes vyspím a zítra to z něj vyrazím :-)

Nahlásit jako SPAM
IP: 78.136.189.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
26. 11. 2015   #4
-
0
-

Vůbec tě nechápu co máš na mysli. Možná to chceš vyřešit takto:

.....
 Scanner sc = new Scanner(System.in);                                            
     String textik1 = sc.nextLine();
     System.out.println("hodnota: " + textik1);
     String textit2 = "t  ".substring(0,2);
     if(textik1.equals(textik2)) {

 .....
Nahlásit jako SPAM
IP: 217.112.161.–
EdaBeginner
~ Anonymní uživatel
2 příspěvky
26. 11. 2015   #5
-
0
-

Ahoj,
díky Ti za kód, zase je využitelný - je vidět, že tomu dost rozumíš. Jak jsi se Javu učil Ty? Mě přijde nejlepší mít ukázkové příklady, z nichž si pak člověk může poskládat třídu co potřebuje. Některé finty asi lze získat pouze praxí (viz. třeba ten ""t  ".substring(0,2)", na toto bych rozhodně sám nepřišel). Máš nějaký oblíbený webík? Já chodím na tutorialspoint.com, jenomže je tam nějak málo příkládků k jednotlivým třídám a metodám a na nějakou vyloženou fintu jsem ještě nenarazil, byť je to čtivé a hezky udělané. Ta "originální" Oracle dokumentace je zase dost suchá a předpokládá se už znalost věci. Mě by vyhovoval spíš nějaký ukázkový "seznam" vytvořených tříd s příslušnými metodami - například zde String a tam všechny (nebo hodně) ukázek aplikací včetně různých metod a fint. Nevíš o něčem?

Nahlásit jako SPAM
IP: 78.136.147.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
27. 11. 2015   #6
-
0
-

Programovat,programovat a zase programovat.

knížky(např. v česku Herouty,Java výukový kurz, a pak samozřejmě US knihy), stackoverflow, apod...

Nahlásit jako SPAM
IP: 217.112.161.–
Petr
~ Anonymní uživatel
746 příspěvků
27. 11. 2015   #7
-
0
-

#3 EdaBeginner
- cannot find symbol = syntakticka chyba, zpusobena napriklad preklepem v nazvu promenne, funkce atd. Proste prekladac nemuze najit definici neceho a mas tam napsane co nemuze najit a zpravidla i radek na kterem to je. Staci si to precist

- cannot return a value from method whose result type is void = opet si to staci precist, snazis se vracet pomoci return hodnotu z metody, ktera ma navratovy typ void (tedy nema vracet nic), bud definuj navratovy typ a nebo odstran ten return z metody

- jak uz bylo zmineno operator porovnani == nelze pouzit k porovnani obsahu objektu, tento operator pokud je pouzit nad objekty neporovnava obsah ale reference na ne. Tedy jinymi slovy zjistuje jestli se jedna o ten samy objekt v pameti. Ve tvem pripade mas dva ruzne objekty, jeden za tebe vytvori prekladac ze stringoveho literalu "t", druhy vznikne v dobe behu programu. Na dva ruzne objekty je nutne pouzit equals metodu, pripadne jinou metodu, ktera je urcena k porovnani techto dvou objektu.

- pokud si chces hrat se stringy tak doporucuji nastudovat co za metody ma trida String viz http://docs.oracle.com/javase/7/docs/api/java/lang/String.html pro to o co se pokousis by se ti mohly hodit metody jako startsWith, endsWith, indexOf, trim, length a pripadne dalsi. Pro nejake komplikovanejsi operace pak existuji knihovny napr. apache commons StringUtils https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html a mnoho dalsich, ale myslim, ze si vystacis s tim co poskytuje trida String.

Nahlásit jako SPAM
IP: 83.240.112.–
Senior Developer
~ Anonymní uživatel
1 příspěvek
21. 3. 2020   #8
-
0
-

#2 NotBeginner

Idiote, měj trochu respekt k začátečníkům. To, že náhodou víš, co to je String neznamená, že se můžeš na ostatní povyšovat. 

Zamysli se nad sebou, než budeš poučovat ostatní :))

Nahlásit jako SPAM
IP: 185.51.250.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
23. 3. 2020   #9
-
0
-

#8 Senior Developer
A ty kryple si nejdřív přečti datum příspěvku než začneš reagovat. Jestli programuješ stejným způsobem jako pozorně čteš, to nechci vidět tvou práci.

Nahlásit jako SPAM
IP: 85.163.79.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 50 hostů

Podobná vlákna

Problem — založil Ghosta

Problém — založil pali6

Problém v C — založil Robin

Problem s C++ — založil ower

Problem — založil jurec

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý