Just nu i M3-nätverket
Gå till innehåll

Inmatning, lagring och utmatning av pythagoreiska tripplar.


Enacleb

Rekommendera Poster

Här är jag med mitt andra programmeringsproblem för idag blink.gif.

 

Fick en uppgift av min lärare, som ser ut så här:

 

Pythagoreiska tripplar är heltalstripplar (a, b, c) som uppfyller a2 + b2 = c2. Skriv ett program som låter användaren mata in högst 10 heltalstripplar och som lagrar dessa i tre fält. Efter varje trippelinmatning ska användaren tillfrågas om han/hon vill mata in en ny trippel. Inmatningen ska avslutas om användaren anger detta eller om antalet inmatade tripplar når 10. När inmatningen är avslutad ska samtliga tripplar undersökas och resultatet skrivas ut.

Exempelvis kan ett par rader i utskriften se ut så här:

Pythagoreisk trippel: 6, 8, 10

Inte en pythagoreisk trippel: 6, 8, 12

Jag har skrivit ett program, som heter "prov3", men får någon form av logiskt fel eller nåt när jag kör det:

 

Exception in thread "main" java.lang.NoClass.DefFoundError: prov

Caused by: java.lang.ClassNotFoundException: prov

etc...

etc...

etc...

Testar att klistra in det här, men inser att det kan bli jobbigt att läsa p.g.a. spaltbreddan på sidan. Annars bifogar jag txt-filen som en bilaga här: prov3.txt

 

Kan vara bra för er att veta att jag läser programmering A och inte ska behöva använda något annat än grunderna i java för att lösa uppgiften (for, if-else, while m.m).

 

 

public class prov3{
public static void main (String[] args) {

	int tal1[] = new int[10];	//Skapa fält för första heltalet i en trippel.
	int tal2[] = new int[10];	//Skapa fält för andra heltalet i en trippel.
	int tal3[] = new int[10];	//Skapa fält för tredje heltalet i en trippel.

	for(int i = 0; i <= 9; i++) {	//Loop för inmatning av tripplar. Iterationsvariabel mellan 0 - 9, motsvarar fältens positioner.

		System.out.print("Vill du mata in en ny trippel? (y / n): "); 	//Mata in ny trippel eller inte?
			char svar = Keyboard.readChar();			//Läs av svar.

			if(svar == 'y') {					//Om svaret är ja...

		System.out.print("Mata in tal nr 1: ");				//Mata in 3 heltal
			tal1[i] = Keyboard.readInt();				//Första heltalet, sparas i position "i" i första fältet.

		System.out.print("Mata in tal nr 2: ");	
			tal2[i] = Keyboard.readInt();				//Andra heltalet, sparas i position "i" i första fältet.

		System.out.print("Mata in tal nr 3: ");
			tal3[i] = Keyboard.readInt();				//Tredje heltalet, sparas i position "i" i första fältet.

			} else if(svar == 'n') {				//Om svaret är nej...

				System.out.println("Test av inmatade tripplar:");	//Testa alla inmatade tripplar.

				for(int k = 0; k <= i; k++) {				//Loop för utmatning av tripplar. Iterationsvariabeln motsvarar fältpositioner.

					if(tal1[k]*tal1[k] + tal2[k]*tal2[k] == tal3[k]*tal3[k]) {	//Om (tal1)^2 + (tal2)^2 = (tal3)^2...

					System.out.println(tal1[k] + " + " + tal2[k] + " + " + tal3[k] + "\tPythagoreisk"); // Skriv ut trippeln + "Pythagoreisk".

					} else {							//Om (tal1)^2 + (tal2)^2 != (tal3)^2...

						System.out.println(tal1[k] + " + " + tal2[k] + " + " + tal3[k] + "\tInte pythagoreisk");	//Skriv ut trippeln + "Inte pyth"

					}	//Slut på andra if-else sats.

				}		//Slut på andra for loop.
			} else {

				System.out.println("Du måste svara med y eller n");

			}	//Slut på första if-else sats.
	}	//Slut på första for loop.

}
}	//Slut på programmet.

Länk till kommentar
Dela på andra webbplatser

Det är nog inget logiskt fel, felkoden betyder att JVM inte hittar ditt program.

Lägg in sökvägen till den mapp där programmet (klassen) finns i miljövariabeln classpath så kanske det fungerar.

 

Edit: Namnet på din källkod är "prov3" men i felmeddelandet står det bara "prov", verkar lite mystiskt, kanske därför det blir fel.

Länk till kommentar
Dela på andra webbplatser

Alltså för i helvete, ibland blir man ju bara trött på sig själv. Döpte om filen och programmet till Prov3 med stort P istället för litet, nu funkar det. angry.gif

 

Nu till det enda problemet. Programmet avslutas inte när man skriver n och tripplarna visas, utan man blir tillfrågad igen om man vill mata in nya tripplar. Men då är ju de "gamla" tripplarna fortfarande lagrade i fälten. Det finns alltså två alternativ: Antingen så använder man något för att stanna programmet. Fick höra av en kompis att man kunde skriva "stop = true;" men det funkade inte. Eller så ser man till att fältens innehåll raderas och blir ledigt igen.

 

Tack på förhand.

Länk till kommentar
Dela på andra webbplatser

Okej, allt funkar perfekt förutom en grej. När jag trycker n och skriver ut mina tripplar visas alla korrekt, plus att "0 + 0 + 0 Pythagoreisk" visas. Hur kan jag få bort detta? Inte nödvändigt, men vore skönt.

Länk till kommentar
Dela på andra webbplatser

Du kan ha en if-sats som kollar att man inte skriver in talet 0 och i så fall skriver ut ett felmeddelande.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...