/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Løbe en string igennem
Fra : Jimmi Wolff


Dato : 06-10-02 15:56

Hej igen

Nu har jeg et mindre problem igen.

Jeg skal løbe en string igennem for at se om alle karakterne er mellem 0 og
9. Metoden retuner så en boolean.

Er der nogen som har en nem måde??
På de måder jeg har prøvet har den ikke kørt hele stringen igennem.
Nu har jeg gjort det sådan her. Det kan godt compile med det vil ikke
kører???????

Koden:
public boolean numerisk(String s)
{
int sum = 0;

for (int i = 0; i <= s.length(); i++)
{
if ((s.charAt(i) >= '0') && (s.charAt(i) <= '9'))
sum++;
else
sum--;
}

if (sum == 10)
return true;
else
return false;
}




 
 
Frank Hahn (06-10-2002)
Kommentar
Fra : Frank Hahn


Dato : 06-10-02 16:16

"Jimmi Wolff" <jimmi1311@stofanet.dk> wrote in message
news:3da04f01$0$11471$ba624c82@nntp02.dk.telia.net...
> Hej igen
>
> Nu har jeg et mindre problem igen.
>
> Jeg skal løbe en string igennem for at se om alle karakterne er mellem 0
og
> 9. Metoden retuner så en boolean.
>
> Er der nogen som har en nem måde??
> På de måder jeg har prøvet har den ikke kørt hele stringen igennem.
> Nu har jeg gjort det sådan her. Det kan godt compile med det vil ikke
> kører???????

Indtastet uden at tjekke compiler eller manual,
men den nemmeste måde.
Hvis ikke det er muligt 'bare' at parse den som Long,
eller der findes en egentlig numerisk-tjek-metode.

public boolean numerisk(String s)
{
for(int i=0; i<s.Length(); i++)
if (s.charAt(i)<'0' || s.charAt(i)>'9')
return false; // Ved første ikke-numeriske returneres der

if (s.Length() > 0)
return true; // Hvis vi kommer hertil, så er den numerisk eller tom
else
return false; // Tom streng er jo egentlig ikke numerisk
}




Mikkel Bundgaard (06-10-2002)
Kommentar
Fra : Mikkel Bundgaard


Dato : 06-10-02 16:19

On Sun, 06 Oct 2002 16:56:03 +0200, Jimmi Wolff wrote:

> Hej igen
>
> Nu har jeg et mindre problem igen.
>
> Jeg skal løbe en string igennem for at se om alle karakterne er mellem 0
> og 9. Metoden retuner så en boolean.
>
> Er der nogen som har en nem måde??
> På de måder jeg har prøvet har den ikke kørt hele stringen igennem. Nu
> har jeg gjort det sådan her. Det kan godt compile med det vil ikke
> kører???????
>
> Koden:
> public boolean numerisk(String s)
> {
> int sum = 0;
>
> for (int i = 0; i <= s.length(); i++)
> {
> if ((s.charAt(i) >= '0') && (s.charAt(i) <= '9'))
> sum++;
> else
> sum--;
> }
>
> if (sum == 10)
> return true;
> else
> return false;
> }
Hej Jimmy

Ovenstånde giver så vidt jeg kan se et positivt svar, hvis antallet af
tegn der er tal er mere 10 mere end antallet af tegn, der ikke er tal
(dårligt formuleret). Prøv med noget a la:

public boolean numerisk(String s) {
for (int i = 0; i <= s.length(); i++) {
if (!((s.charAt(i) >= '0') && (s.charAt(i) <= '9')))
// Hvis tegnet ikke er et tal; afslut med false
return false;
}
// Vi har nu været hele strengen igennem og kun fundet tal
return true;
}

I ovenstående tager jeg forbehold for slå fejl og logisk fejl.

PS. Du har vist en slåfejl i din for-løkke:
--
Mikkel Bundgaard
Student at IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum

Mikkel Bundgaard (06-10-2002)
Kommentar
Fra : Mikkel Bundgaard


Dato : 06-10-02 16:22

On Sun, 06 Oct 2002 17:19:07 +0200, Mikkel Bundgaard wrote:

> On Sun, 06 Oct 2002 16:56:03 +0200, Jimmi Wolff wrote:
>
>> for (int i = 0; i <= s.length(); i++)
> PS. Du har vist en slåfejl i din for-løkke:
Jeg fik lige sendt beskeden for hurtigt
Din for-løkke skal se sådan ud
for (int i = 0; i < s.length(); i++)

Dvs. at den kun skal udføres sålænge, at i er mindre end s.length() ellers
får du en StringIndexOutOfBoundsException
--
Mikkel Bundgaard
Student at IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum

Ole Ildsgaard Hougaa~ (06-10-2002)
Kommentar
Fra : Ole Ildsgaard Hougaa~


Dato : 06-10-02 16:29

"Jimmi Wolff" <jimmi1311@stofanet.dk> wrote:

>Hej igen
>
>Nu har jeg et mindre problem igen.
>
>Jeg skal løbe en string igennem for at se om alle karakterne er mellem 0 og
>9. Metoden retuner så en boolean.
>
>Er der nogen som har en nem måde??

Hvis du bruger Java 1.4, kan du bruge understøttelsen af regulære
udtryk:
public boolean numerisk(String s) {
return s.matches("[0-9]*"); //eller return s.matches("\\d*");
}

Ellers kan du bruge den indbyggede tal-parser i Integer (men det er
mere kryptisk):

public boolean numerisk(String s) {
try {
return Integer.parseInt(s) >= 0;
//Ovenstående returnerer sandt hvis s represænterer
//et ikke-negativt heltal, og falsk hvis s represænterer
//et negativt heltal.
} catch (NumberFormatException e) {
//Her kommer vi hvis s ikke er et heltal.
return false;
}
}

>På de måder jeg har prøvet har den ikke kørt hele stringen igennem.
>Nu har jeg gjort det sådan her. Det kan godt compile med det vil ikke
>kører???????
>
>Koden:
>public boolean numerisk(String s)
> {
> int sum = 0;
>
> for (int i = 0; i <= s.length(); i++)

Her er dit problem: charAt() kræver et index mellem 0 og
s.length() - 1. Erstat i <= s.length() med i < s.length().
> {
> if ((s.charAt(i) >= '0') && (s.charAt(i) <= '9'))
> sum++;
> else
> sum--;
> }
>
> if (sum == 10)
> return true;
> else
> return false;
> }

Den ovenstående if-sætning er overflødig.
return sum == 10;
skulle kunne gøre det.

--
Ole I. Hougaard
oih@get2net.dk

Ole Ildsgaard Hougaa~ (06-10-2002)
Kommentar
Fra : Ole Ildsgaard Hougaa~


Dato : 06-10-02 18:08

Ole Ildsgaard Hougaard <oih@get2net.dk> wrote:

>"Jimmi Wolff" <jimmi1311@stofanet.dk> wrote:
<snip>

>Den ovenstående if-sætning er overflødig.
> return sum == 10;
>skulle kunne gøre det.

Jeg retter lige mig selv: sum indeholder antallet af numeriske tegn i
s minus antallet af ikke-numeriske tegn i s. Derfor skal sum være lig
længden af s:
return sum == s.length;
--
Ole I. Hougaard
oih@get2net.dk

Bertel Lund Hansen (06-10-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 06-10-02 16:40

Jimmi Wolff skrev:

>Er der nogen som har en nem måde??

Din metode virker sådan set. Hvis du returnerer sum i stedet for
at teste om den er større end 10 og svare true/false, så får du
antallet af cifre i strengen. Du skal dog lige fjerne den del der
trækker 1 fra sum. Det vil jo give 0 for f.eks. "a1" og "bb22".

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Filip Larsen (06-10-2002)
Kommentar
Fra : Filip Larsen


Dato : 06-10-02 18:00

Jimmi Wolff skrev

> Jeg skal løbe en string igennem for at se om alle karakterne er mellem 0
og
> 9. Metoden retuner så en boolean.

Hvis du vil undersøge om et unicode-tegn er et ciffer kan du bruge
Character.isDigit(), fx:

boolean containOnlyDigits(String s) {
for (int i = 0; i < s.length(); i++) {
if (!Character.isDigit(s.charAt(i))) return false;
}
return true;
}


Mvh,
--
Filip Larsen <filip.larsen@mail.dk>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste