Iba Pa

Mac 'String index out of range: 0' ...Maaari bang may magsabi sa akin kung ano ang mali dito? (Java)

Chase R

Orihinal na poster
Mayo 8, 2008
PDX
  • Hun 2, 2009
Katatapos ko lang isulat ang program na ito para sa aking java class. Ito ay isang simpleng programa na kinakalkula kung magkano ang gastos sa pag-install ng isang bakod. Sa dulo, itatanong nito 'gusto mo bang gumawa ng isa pang pagtatantya (Y/N)', at ang user ay ipagpalagay na pumili ng oo o hindi. Gayunpaman, pagkatapos kong patakbuhin ang akin, hindi ko makukuha ang opsyong iyon, ang sabi lang nito:

Kalkulahin ang Isa pang Estimate (Y/N): Exception sa thread na 'main' java.lang.StringIndexOutOfBoundsException: String index na wala sa saklaw: 0
sa java.lang.String.charAt (String.java:558)
sa Test1.main(Test1.java:73)

Bakit nya ginagawa to!!!

Narito ang programa sa pamamagitan ng paraan:

Code: |_+_|

Littleodie914

Hun 9, 2004


Rochester, NY
  • Hun 2, 2009
Wow, nakakalito. Ginawa ko ito sa pamamagitan ng pagpapalit ng iyong huling 'read.nextLine()' sa 'read.next()' lang, ngunit titingnan ko nang mas malapit upang makita kung bakit hindi ito gumana sa unang paraan.

I-edit: Tila may kinalaman sa nextLine() na pamamaraan na nagsusulong sa pointer na lampas sa kasalukuyang linya. Hindi ko masyadong naiintindihan ito sa aking sarili, ngunit ang mga link na ito ay maaaring makatulong sa pag-alis ng kaunting pagkalito:

API Scanner
Kaugnay na Post ng Forum

HiRez

Ene 6, 2004
Kanlurang US
  • Hun 2, 2009
Hulaan ko na ang isa sa iyo dati ang mga read call ay umaalis sa bagong linyang character sa keyboard input buffer. Samakatuwid, kapag tumawag ka sa nextLine(), makakakuha ka ng walang laman na string, na humahantong sa pagbubukod na sinusubukang suriin ang character sa posisyon 0, dahil wala. Isa rin itong problema sa marami sa mga function ng console input C. Kahit papaano ay malamang na gusto mong i-flush muna ang buffer gamit ang isang dummy read call o kung ano pa man. Hindi ko na ginagamit ang Java sa mahabang panahon kaya hindi ko alam kung ano ang magiging tamang pamamaraan.

gnasher729

Nasuspinde
Nob 25, 2005
  • Hun 2, 2009
Sinabi ni Chase R: Katatapos ko lang isulat ang program na ito para sa aking java class. Ito ay isang simpleng programa na kinakalkula kung magkano ang gastos sa pag-install ng isang bakod. Sa dulo, itatanong nito 'gusto mo bang gumawa ng isa pang pagtatantya (Y/N)', at ang user ay ipagpalagay na pumili ng oo o hindi. Gayunpaman, pagkatapos kong patakbuhin ang akin, hindi ko makukuha ang opsyong iyon, ang sabi lang nito:

Kalkulahin ang Isa pang Estimate (Y/N): Exception sa thread na 'main' java.lang.StringIndexOutOfBoundsException: String index na wala sa saklaw: 0
sa java.lang.String.charAt (String.java:558)
sa Test1.main(Test1.java:73)

Bakit nya ginagawa to!!!

Dahil mayroon kang source code, marahil sa isang editor ng programa na maaaring gawin upang ipakita ang mga numero ng linya, dapat mong mahanap kung nasaan ang linya 73 sa file na Test1.main. Ipapakita nito sa iyo kung saan nangyayari ang problema.

Ngayon ay mayroon kang isang pagbubukod na nagsasabing ang isang index ng 0 ay 'wala sa saklaw'. Kung na-access mo ang isang string na may n character, ano ang mga wastong indeks?

Ngayon, maaari mo bang sabihin sa amin kung aling sitwasyon ang index 0 ay hindi wastong index?

Dapat sagutin niyan ang tanong mo.

SilentPanda

Moderator emeritus
Oktubre 8, 2002
Ang Bamboo Forest
  • Hun 2, 2009
Sinabi ni gnasher729: Dahil mayroon kang source code, marahil sa isang editor ng programa na maaaring gawin upang ipakita ang mga numero ng linya, dapat mong mahanap kung nasaan ang linya 73 sa file na Test1.main. Ipapakita nito sa iyo kung saan nangyayari ang problema.

Ang linya ay:

Code: |_+_|
pagkatapos nitong ipakita ang 'Calculate Another Estimate (Y/N):'