-1

I don't know what's happeing, i just changed all of this to functions and now it don't work and i can't figure out why.

I got object with exercises, at this moment i got only one exercise so click 1 when prompt appear, this should run Zadania.zad1 (eng. Exercises.exc1) but somehow it says that Zadania.zad1 isn't a function.

(function(){
 Zadania = {};

 wybierzZadanie();

 function wybierzZadanie() {
  do {
   var numer_zadania = parseInt(prompt("Podaj numer zadania (click 1 right now and look at a failure xD sry im from poland)"));
  } while(numer_zadania <= 0 || !numer_zadania);

  switch(numer_zadania) {
   case 1: Zadania.zad1()
   break;

   case 2: Zadania.zad2()
   break;

   case 3: Zadania.zad3()
   break;

   case 4: Zadania.zad4()
   break;

   case 5: Zadania.zad5()
   break;

   case 6: Zadania.zad6()
   break;

   case 7: Zadania.zad7()
   break;

   case 8: Zadania.zad8()
   break;
  }
 }

 Zadania.zad1 = function() {
  console.log("Zadanie numer 1");

  var arg = [];
  var najwieksza = -Infinity;
  var najmniejsza = Infinity;

  do {
   var doTablicy = prompt("Podaj pojedynczo liczby i zatwierdzaj enterem (0 kończy wpisywanie)");

   if(doTablicy.length != 1) {
    alert("Podaj liczby pojedynczo");
   } else if(typeof(parseInt(doTablicy)) == "number") {
    arg.push(doTablicy);
   }

  } while(doTablicy != 0);

  for(let i = 0; i <= arguments.length-1; i++) {
   if(i == 0) {
    najwieksza = arguments[i];
   } else if(arguments[i] > najwieksza) najwieksza = arguments[i];
  }

  for(let i = 0; i <= arguments.length-1; i++) {
   if(i == 0) {
    najmniejsza = arguments[i];
   } else if(arguments[i] < najmniejsza) najwieksza = arguments[i];
  }

  alert("Z liczb: " + arguments + " najmniejsza liczba to: " 
   + najmniejsza + " a największa to: " + najwieksza);

  wybierzZadanie();
 }
})();
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>Zadania</title>
 <script type="text/javascript" src="zadania.js"></script>
</head>
<body>

</body>
</html>
Mariuho
  • 7
  • 4
  • Where do you define *Zadania.zad2()* ?? – Jonas Wilms Oct 11 '17 at 21:37
  • `Zadania.zad1` is not assigned yet when you execute `wybierzZadanie()`. – cFreed Oct 11 '17 at 21:38
  • Because your code runs when calling `wyberzZandie` before its definition, it could seem confusing... there is a good explanation of this behavior here: https://stackoverflow.com/a/261682/691969 – Trey Oct 11 '17 at 21:44

2 Answers2

1

You are calling the wybierzZadanie function before you defined Zadania.zad1. Try this instead:

(function(){
 Zadania = {};

 function wybierzZadanie() {
  do {
   var numer_zadania = parseInt(prompt("Podaj numer zadania (click 1 right now and look at a failure xD sry im from poland)"));
  } while(numer_zadania <= 0 || !numer_zadania);

  switch(numer_zadania) {
   case 1: Zadania.zad1()
   break;

   case 2: Zadania.zad2()
   break;

   case 3: Zadania.zad3()
   break;

   case 4: Zadania.zad4()
   break;

   case 5: Zadania.zad5()
   break;

   case 6: Zadania.zad6()
   break;

   case 7: Zadania.zad7()
   break;

   case 8: Zadania.zad8()
   break;
  }
 }

 Zadania.zad1 = function() {
  console.log("Zadanie numer 1");

  var arg = [];
  var najwieksza = -Infinity;
  var najmniejsza = Infinity;

  do {
   var doTablicy = prompt("Podaj pojedynczo liczby i zatwierdzaj enterem (0 kończy wpisywanie)");

   if(doTablicy.length != 1) {
    alert("Podaj liczby pojedynczo");
   } else if(typeof(parseInt(doTablicy)) == "number") {
    arg.push(doTablicy);
   }

  } while(doTablicy != 0);

  for(let i = 0; i <= arguments.length-1; i++) {
   if(i == 0) {
    najwieksza = arguments[i];
   } else if(arguments[i] > najwieksza) najwieksza = arguments[i];
  }

  for(let i = 0; i <= arguments.length-1; i++) {
   if(i == 0) {
    najmniejsza = arguments[i];
   } else if(arguments[i] < najmniejsza) najwieksza = arguments[i];
  }

  alert("Z liczb: " + arguments + " najmniejsza liczba to: " 
   + najmniejsza + " a największa to: " + najwieksza);

  wybierzZadanie();
 }

 wybierzZadanie();
})();
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>Zadania</title>
 <script type="text/javascript" src="zadania.js"></script>
</head>
<body>

</body>
</html>
JDB
  • 25,172
  • 5
  • 72
  • 123
0

Cześć! You need to move wybierzZadanie(); line to the end of the script, because at the moment you call it it is undefined yet. So Zadania.zad1 = function() {... should be before you call wybierzZadanie().

Bunyk
  • 7,635
  • 8
  • 47
  • 79