Avatar billede mlunde Nybegynder
01. december 2008 - 05:28 Der er 8 kommentarer og
1 løsning

Java: odd or even numbers

Hej alle.

Jeg er ved at lave et progrsm med arrays, der til sidst tæller sammen hvor mange lige og ulige tal, man har tastet ind.
Umiddelbart ser programmet fint ud, men jeg får en fejlkode ved if-statement under 'i'.

Nogle der umiddelbart kan se problemet?

Hilsen Michael

import java.util.*;

public class A122 {
    public static void main (String[] args) {
        final int MAXSIZE = 10;
        Scanner keyboard = new Scanner(System.in);
        int number[] = new int[MAXSIZE];
        String inputValue;
        int amountNum=0;
        int OddCount=0;
        int EvenCount=0;
       
        System.out.print("Enter 10 numbers or EXIT to stop: ");
        inputValue = keyboard.nextLine();
        while (!inputValue.toUpperCase().equals("EXIT"))  {
            number[amountNum++]=Integer.parseInt(inputValue);
            System.out.print("Enter a number or EXIT to stop: ");
            inputValue = keyboard.nextLine();
        }       

            for (int i=0;i<number.length;i++)
                System.out.println(number[i]);
           
            if(number[i] % 2 == 1)
                OddCount++;
           
            else
                EvenCount++;

                System.out.println("You have " + OddCount + " odd numbers.");
           
                System.out.println("You have " + EvenCount + " even numbers.");
          }
    }
Avatar billede mcgoat Nybegynder
01. december 2008 - 05:45 #1
vil tro det er fordi:

for (int i=0;i<number.length;i++) System.out.println(number[i]);

Printer nok tallene rigtigt ud, men ... nu er i jo bare lig med length, som vil være 10 hvis du har 10 tal derinde.
           
Men der vil jo ikke ligge noget på plads 10, da det første ligger på index 0 i array
så vil tro det er derfor den fejler med:

if(number[10] % 2 == 1) OddCount++;


uden at være helt sikker, kender ikke meget til java
Avatar billede mcgoat Nybegynder
01. december 2008 - 05:46 #2
du skal vel have dit if/else ind i din for løkke?
Avatar billede mcgoat Nybegynder
01. december 2008 - 05:49 #3
for (int i=0;i<number.length;i++){
  System.out.println(number[i]);
           
  if(number[i] % 2 == 1){
      OddCount++;
  }       
  else{
      EvenCount++;
  }


vil jeg tro ville funke
Avatar billede mcgoat Nybegynder
01. december 2008 - 05:49 #4
ehm.. manglede lige at afslutte "for" med } til sidst
Avatar billede mcgoat Nybegynder
01. december 2008 - 05:50 #5
smider lige et svar hvis det var det, ellers bare afvis det. Vil hoppe i seng nu
Avatar billede mlunde Nybegynder
01. december 2008 - 06:13 #6
Jeg har prøvet med det der blev skrevet, så nu ser min kode således ud.
Jeg får dog stadig en rød fejl-linie under i'et i mit if-statement.


import java.util.*;
import java.util.Scanner;

public class A122 {
    public static void main (String[] args) {
        final int MAXSIZE = 10;
        Scanner keyboard = new Scanner(System.in);
        int number[] = new int[MAXSIZE];
        String inputValue;
        int amountNum=0;
        int OddCount=0;
        int EvenCount=0;
       
        System.out.print("Enter 10 numbers or EXIT to stop: ");
        inputValue = keyboard.nextLine();
        while (!inputValue.toUpperCase().equals("EXIT"))  {
            number[amountNum++]=Integer.parseInt(inputValue);
            System.out.print("Enter a number or EXIT to stop: ");
            inputValue = keyboard.nextLine();
        }       

        for (int i=0;i<number.length;i++){
              System.out.println(number[i]);
        }       
              if(number[i] % 2 == 1){
                  OddCount++;
              }     
              else{
                  EvenCount++;
              }


        System.out.println("You have " + OddCount + " odd numbers.");
           
        System.out.println("You have " + EvenCount + " even numbers.");
          }
    }
Avatar billede schwarz84 Nybegynder
01. december 2008 - 09:06 #7
Dine if'er skal med under din forløkke, i er kun defineret i scope af for. Dette kode:
        for (int i=0;i<number.length;i++){
              System.out.println(number[i]);
        }       
              if(number[i] % 2 == 1){
                  OddCount++;
              }     
              else{
                  EvenCount++;
              }

Skal laves om til:
        for (int i=0;i<number.length;i++){
              System.out.println(number[i]);
              if(number[i] % 2 == 1){
                  OddCount++;
              }     
              else{
                  EvenCount++;
              }
        }
Avatar billede mlunde Nybegynder
01. december 2008 - 09:41 #8
Mange tak. Det hjalp.
Hvordan får jeg gjort den 'ikke-afhængig' af min MAXSIZE?
Altså jeg fjerner den..
Avatar billede schwarz84 Nybegynder
01. december 2008 - 09:50 #9
Så skal du bruge en ArrayList i stedet for et array. En ArrayList har en add metode som tilføjer et nyt element. Der er ingen umiddelbar grænse på hvor mange elementer du kan putte i den:

import java.util.*;
import java.util.Scanner;

public class A122 {
    public static void main (String[] args) {
        Scanner keyboard = new Scanner(System.in);
        ArrayList<Integer> number = new ArrayList<Integer>();
        String inputValue;
        int amountNum=0;
        int OddCount=0;
        int EvenCount=0;
       
        System.out.print("Enter some numbers or EXIT to stop: ");
        inputValue = keyboard.nextLine();
        while (!inputValue.toUpperCase().equals("EXIT"))  {
            number.add(Integer.parseInt(inputValue));
            System.out.print("Enter a number or EXIT to stop: ");
            inputValue = keyboard.nextLine();
        }       

        for (int i=0;i<number.size();i++){
              System.out.println(number.get(i));
              if(number.get(i) % 2 == 1){
                  OddCount++;
              }     
              else{
                  EvenCount++;
              }
        }

        System.out.println("You have " + OddCount + " odd numbers.");
           
        System.out.println("You have " + EvenCount + " even numbers.");
          }
    }

Her har jeg lavet så lidt som muligt om på din kode. Du kunne med fordel udskifte for-løkken som tæller lige/ulige tal med en for-in løkke. Der er i øvrigt tradition for at man i java altid starter et navn på en variabel med et lille bogstav. EvenCount bør således hedde evenCount...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester