Vinnaren i pepparkakshustävlingen!
2020-08-13, 01:28
  #1
Medlem
Jag arbetar med en kursinlämning och försöker just nu att skapa en loop där användaren först matar in namnet på en hund och om hundens namn finns i ArrayListen "dogIndex", fortsätter programmet fråga efter ett användarnamn och gör samma sak där (kollar mot ArrayListen userIndex).

Om hunden inte hittades i början av loopen ska den printa ut "Error: dog not found" och loopen avslutas, samma logik gäller när användarnamn efterfrågas.
Det enda jag har fått till är att loopen avslutas när hunden inte hittas. Jag vet annars inte vart i loopen jag ska sätta printen för att den ska printa "Error: dog not found" vid rätt tillfälle.

Kod:
Name of the dog?>asdasdasd
//HÄR ska den säga "Error..."
Next command?>

Tanken är egentligen tänkt att 2 olika metoder ska köras istället för att printa ut text, men dessa 2 metoder är inte färdiga än så jag använder mig av print istället så jag har koll på hur loopen funkar.

Kod:
public void giveDog() {
	System.out.print("Name of the dog?>");
	String dogName = input.registerString();
	for (Dog d : dogIndex) {
		if (d.getName().equalsIgnoreCase(dogName)) {
			System.out.println("dog found");
			System.out.print("Name of user?>");
			String userName = input.registerString();
			for (User u : userIndex) {
				if (u.getName().equalsIgnoreCase(userName)) {
				System.out.print("user found");
				return;
				} else {
					System.out.println("Error: user not found");
					break;
				}
			}
		}
			else {  System.out.println("Error: dog not found"); }
	}
}
__________________
Senast redigerad av Demnok 2020-08-13 kl. 01:45.
Citera
2020-08-13, 01:35
  #2
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av Demnok
Jag arbetar med en kursinlämning och försöker just nu att skapa en loop där användaren först matar in namnet på en hund och om hundens namn finns i ArrayListen "dogIndex", fortsätter programmet fråga efter ett användarnamn och gör samma sak där (kollar mot ArrayListen userIndex).

Om hunden inte hittades i början av loopen ska den printa ut "Error: user not found" och loopen avslutas, samma logik gäller när användarnamn efterfrågas.
Det enda som jag inte har lyckats få till är att den ska printa "Error: dog not found" också, annars så avslutas loopen precis som tänkt, bara det att jag inte vet vart i loopen jag ska sätta printen för att den ska printa vid rätt tillfälle. Där den står nu ger mig istället:

Kod:
Name of the dog?>disa
Error: dog not found
Error: dog not found
dog found
Name of user?>

Tanken är egentligen tänkt att 2 olika metoder ska köras istället för att printa ut text, men dessa 2 metoder är inte färdiga än så jag använder mig av print istället så jag har koll på hur loopen funkar.

Kod:
public void giveDog() {
	System.out.print("Name of the dog?>");
	String dogName = input.registerString();
	for (Dog d : dogIndex) {
		if (d.getName().equalsIgnoreCase(dogName)) {
			System.out.println("dog found");
			System.out.print("Name of user?>");
			String userName = input.registerString();
			for (User u : userIndex) {
				if (u.getName().equalsIgnoreCase(userName)) {
				System.out.print("user found");
				return;
				} else {
					System.out.println("Error: user not found");
					break;
				}
			}
		}
			else {  System.out.println("Error: dog not found"); }
	}
}

Förstår jag rätt i att du vill få error-printen om listan är tom? Printen ligger i loopen, och är listan tom så loopar du 0 varv.

Om jag vore du skulle jag börja med att bryta ner allt i mindre funktioner.
Citera
2020-08-13, 01:43
  #3
Medlem
Citat:
Ursprungligen postat av Trollfeeder
Förstår jag rätt i att du vill få error-printen om listan är tom? Printen ligger i loopen, och är listan tom så loopar du 0 varv.

Om jag vore du skulle jag börja med att bryta ner allt i mindre funktioner.

SORRY tänkte helt fel där. Jag editade mitt huvudinlägg och jag postar nu med den biten jag rättade:

Om hunden inte hittades i början av loopen ska den printa ut "Error: dog not found" och loopen avslutas, samma logik gäller när användarnamn efterfrågas.
Det enda jag har fått till är att loopen avslutas när hunden inte hittas. Jag vet annars inte vart i loopen jag ska sätta printen för att den ska printa "Error: dog not found" vid rätt tillfälle.

Kod:
Name of the dog?>asdasdasd
//HÄR ska den säga "Error..."
Next command?>
Citera
2020-08-13, 07:57
  #4
Medlem
Nybörjarkod

Gör såhär,

Börja med att ta bort all onödig kod som case konvertering. Ska du göra case konvertering gör den INNAN loopen

Samma sak med att deklarera nya variabler, gör det UTANFÖR LOOPEN

rensa så du har en ren enkel snygg loop.

I loopen gör du sedan villkorsfrågor, se till att loopen inte blir oändlig.

Personligen hade jag gjort en retur på 0 eller 1 om träff och skrivit ut resultat med en if utanför för att göra koden läsbar.
Citera
2020-08-13, 07:59
  #5
Medlem
Din andra for-loop testar ju inte igenom alla listelement. Bara det första. Antingen hittar den användaren
vid första listelementet och hoppar ur funktionen eller så hittar den inte och hoppar ur for-loopen.
Citera
2020-08-16, 10:29
  #6
Medlem
Citat:
Ursprungligen postat av Demnok
Om hunden inte hittades i början av loopen ska den printa ut "Error: dog not found" och loopen avslutas, samma logik gäller när användarnamn efterfrågas.
Det enda jag har fått till är att loopen avslutas när hunden inte hittas. Jag vet annars inte vart i loopen jag ska sätta printen för att den ska printa "Error: dog not found" vid rätt tillfälle.

Är kravet att det skall vara nästlat?

Annars kan du lägga in en tidig return

Kod:
public void giveDog() {

            
System.out.print("Name of the dog?>");
            
String dogName input.registerString();
            
Dog requestedDog null;
            for (
Dog d dogIndex) {
                if (
d.getName().equalsIgnoreCase(dogName)) {
                    
requestedDog d;
                    
System.out.println("dog found");
                    break;
                }
            }

            if (
requestedDog == null) {
                
System.out.println("Error: dog not found");
                return;
            }

            
System.out.print("Name of user?>");
            
String userName input.registerString();
            
User requestedUser null;
            for (
User u userIndex) {
                if (
u.getName().equalsIgnoreCase(userName)) {
                    
requestedUser u;
                    
System.out.print("user found");
                    break;
                }
            }
            
            if (
requestedUser == null){
                
System.out.println("Error: user not found");
            }
        } 

Eller i funktionell stil

Kod:
public void giveDogFunctional() {

            
String dogName input.registerString();
            
Dog dog dogIndex.stream()
                    .
filter(-> d.getName().equalsIgnoreCase(dogName))
                    .
findFirst()
                    .
orElse(null);

            if (
dog == null) {
                
System.out.println("dog not found");
                return;
            }
            
            
// some method on dog

            
String userName input.registerString();
            
User user userIndex.stream()
                    .
filter(-> u.getName().equalsIgnoreCase(userName))
                    .
findFirst()
                    .
orElse(null);

            if (
user == null) {
                
System.out.println("user not found");
            }
            
            
// some method on user
        

Citera
2020-08-16, 19:38
  #7
Medlem
Citat:
Ursprungligen postat av Headsoft
Är kravet att det skall vara nästlat?

Annars kan du lägga in en tidig return

Kod:
public void giveDog() {

            
System.out.print("Name of the dog?>");
            
String dogName input.registerString();
            
Dog requestedDog null;
            for (
Dog d dogIndex) {
                if (
d.getName().equalsIgnoreCase(dogName)) {
                    
requestedDog d;
                    
System.out.println("dog found");
                    break;
                }
            }

            if (
requestedDog == null) {
                
System.out.println("Error: dog not found");
                return;
            }

            
System.out.print("Name of user?>");
            
String userName input.registerString();
            
User requestedUser null;
            for (
User u userIndex) {
                if (
u.getName().equalsIgnoreCase(userName)) {
                    
requestedUser u;
                    
System.out.print("user found");
                    break;
                }
            }
            
            if (
requestedUser == null){
                
System.out.println("Error: user not found");
            }
        } 

Eller i funktionell stil

Kod:
public void giveDogFunctional() {

            
String dogName input.registerString();
            
Dog dog dogIndex.stream()
                    .
filter(-> d.getName().equalsIgnoreCase(dogName))
                    .
findFirst()
                    .
orElse(null);

            if (
dog == null) {
                
System.out.println("dog not found");
                return;
            }
            
            
// some method on dog

            
String userName input.registerString();
            
User user userIndex.stream()
                    .
filter(-> u.getName().equalsIgnoreCase(userName))
                    .
findFirst()
                    .
orElse(null);

            if (
user == null) {
                
System.out.println("user not found");
            }
            
            
// some method on user
        


Du tycker hen ska förstå streams så här pass tidigt? Och jag tror absolut inte lambdauttryck som d -> d.getName().equalsIgnoreCase(dogName) kommer hjälpa heller
Citera
2020-08-16, 19:46
  #8
Medlem
Citat:
Ursprungligen postat av gameboyguy
Du tycker hen ska förstå streams så här pass tidigt? Och jag tror absolut inte lambdauttryck som d -> d.getName().equalsIgnoreCase(dogName) kommer hjälpa heller

Predikatet är ju en kopia av hans egen kod så antar att han förstår den själv.
När det kommer till streams så ser jag inget problem med att få ett förslag. Jag vet som sagt inte premisserna för koden han har gett.
Om kravet är att det ska användas nästlade loopar så fallerar ju bägge oavsett.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback