Wątek przeniesiony 2014-03-15 22:32 z Java przez bogdans.

Błąd "might not have been initialized"

0

Witam wszystkich,

Dopiero zaczęłam moją przygodę z programowaniem w Javie. Mój kierunek studiów wymaga znajomości Javy, więc przykładam się do nauki jak mogę :) No, ale przejdźmy do rzeczy. Moim zadaniem domowym było napisanie programu, który ma dwa argumenty (użytkownik wpisuje je klikając w nazwę projektu-->properties-->run-->arguments). Wpisywanie z klawiatury jeszcze przede mną :) Później program miał wyliczyć sumę postaci 3i^2 dla i={1,2,3,...,n}. Na końcu miałam zabezpieczyć program przed źle wprowadzonymi wartościami za pomocą try/catch. Oto mój cały kod:


package zadanie1;


public class Obliczenia {

    
    public static void main(String[] args) {
        int n;
        int m;
        int suma = 0;
        try {
            n = Integer.parseInt(args[0]);
            m = Integer.parseInt(args[1]);
        } catch (NumberFormatException e) {
            System.out.println("Podaj dwie liczby całkowite");
        }

        for (int i = 1; i <= n; i++) {

            suma += 3 * i * i;

        }

        System.out.println("Suma takiej postaci wynosi " + suma);

        // TODO code application logic here
    }

}

Kiedy wpisuję dwie liczby, np 3 i 8, i uruchamiam program to wyświetla mi się na czerwono coś takiego:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - variable n might not have been initialized
at zadanie1.Obliczenia.main(Obliczenia.java:23)
Java Result: 1

Kiedy wpisuję błędne dane (cyfrę i literę) to wyskakuje to:
Podaj dwie liczby całkowite
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - variable n might not have been initialized
at zadanie1.Obliczenia.main(Obliczenia.java:23)
Java Result: 1

Co mam zrobić żeby program mi działał? Dodam, że przed napisaniem try/catch wszystko było ok.

1

Super, działa. Tylko dlaczego trzeba było przypisać n i m na początku wartość 0?

1
public class Obliczenia
  {
   public static void main(String[] args)
     {
      try
        {
         int n=Integer.parseInt(args[0]),m=Integer.parseInt(args[1]);
         long suma=0;
         /* for(int i=1;i<=n;++i) suma+=i*i; */
         for(int i=0;i<n;suma+=++i) suma+=i; /* to znacznie szybsze */
         System.out.println("Suma takiej postaci wynosi "+(3*suma));
        }
      catch(NumberFormatException e)
        {
         System.out.println("Podaj dwie liczby całkowite");
        }
      catch(...) /* jeżeli brak dwóch parametrów można zapodać konkretny wyjątek */
        {
         System.out.println("Program potrzebuje dwóch parametrów");
        }
     }
  }
1

Moim zdaniem powyższy kod jest niepoprawny. Obsługa wyjątków jest kosztowna, nie należy jej używać do sprawdzania prostych warunków.

public class Obliczenia
  {
   public static void main(String[] args)
     {
      if(args.length<2)
      {
          System.out.println("Program potrzebuje dwóch parametrów typu int");
          System.exit(0);
      }
      try
        {
         int n=Integer.parseInt(args[0]),m=Integer.parseInt(args[1]);
         int suma=0;
         /* for(int i=1;i<=n;++i) suma+=i*i; */
         for(int i=0;i<n;suma+=++i) suma+=i; /* to znacznie szybsze */
         System.out.println("Suma takiej postaci wynosi "+(3*suma));
        }
      catch(NumberFormatException e)
        {
         System.out.println("Parametry nie są typu int");
        }
     }
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1