Vinnaren i pepparkakshustävlingen!
2017-03-01, 10:22
  #1
Medlem
Jag har en liksidig triangel som ska skrivas ut i höjd och bredd enligt det antal rader som användaren anger. Nu vill jag ändra siffran till att motsvara en bokstav.
1 = A, 2 = B osv

Med nuvarande kod blir resultatet så här vid valet 4 för antalet:

1
12
123
1234

Men jag vill presentera svaret så här i stället:

A
AB
ABC
ABCD

Det här är min kod så långt jag kommit. Men den resulterar bara i att varje rad avslutas med ett 'A'.

Kod:
import java.util.Scanner;
public class Triangle {
	
public static void main(String[] args) {
	System.out.println("Ange längden för de två sidorna i den rätvinkliga triangeln. ");
	java.util.Scanner scan = new java.util.Scanner (System.in);
		
	int nr = scan.nextInt();
	
	int counter = 0;
	char letter = (char)(counter + 65);

		for (int i = 1; i <= nr; i++)
			{
			for (int j = 1; j <= i; j++)
				System.out.print(j + " ");	
				System.out.println(letter);
			}
	}
}
Citera
2017-03-01, 10:43
  #2
Medlem
Är du säker på att du vill ha din radbrytning i den inre loopen?
Citera
2017-03-01, 11:07
  #3
Medlem
Ja, då funkar det för mig. Hur menar du att jag ska göra annars?
Citera
2017-03-01, 11:11
  #4
Medlem
Räkna ut letter inuti loopen istället, och självfallet ska du inte skriva ut variabeln j om du vill skriva ut bokstäver istället för siffror.
Citera
2017-03-01, 11:45
  #5
Medlem
Nu får jag en triangel med bara A. Hur får jag räknaren att rulla fram?

Kod:
import java.util.Scanner;
public class Triangle {
	
public static void main(String[] args) {
	System.out.println("Ange längden för de två sidorna i den rätvinkliga triangeln. ");
	java.util.Scanner scan = new java.util.Scanner (System.in);
		
	int tal = scan.nextInt();
	int j = 0;
	
		for (int i = 1; i <= tal; i++)
			{
			int counter = 0;
			char letter = (char)(counter + 65);

			for (counter = 1; counter <= i; counter++)
				
				System.out.print(letter + " ");	

			System.out.println(letter);
			}
	}
}

Citera
2017-03-01, 12:49
  #6
Moderator
tobess avatar
Jag skulle göra ungefär såhär:

Du tar den siffra du läst in (variabeln, nr) och så lägger du in följande under:

Kod:
StringBuilder s = new StringBuilder();
    
int j 65;
    
        for (
int i=65i<=64+nri++)
            {
            
s.append((char)(j));
            
System.out.println(s);
            
j++;
            } 

Klart.
Citera
2017-03-01, 12:59
  #7
Moderator
tobess avatar
Såg nu att du hade bytt ut nr mot tal. Nu har jag ingen möjlighet att testkompilera men det borde alltså se ut ungefär såhär:

Kod:
import java.util.Scanner;
import java.lang.StringBuilder;

public class 
Triangle {
    
public static 
void main(String[] args) {
    
System.out.println("Ange längden för de två sidorna i den rätvinkliga triangeln. ");
    
java.util.Scanner scan = new java.util.Scanner (System.in);
        
    
int tal scan.nextInt();
    
StringBuilder s = new StringBuilder(); 
        
int j 65
     
        for (
int i=65i<=64+tali++) 
            { 
            
s.append((char)(j)); 
            
System.out.println(s); 
            
j++; 
            }  
    }

Citera
2017-03-01, 13:01
  #8
Medlem
Citat:
Ursprungligen postat av bellajonna
Ja, då funkar det för mig. Hur menar du att jag ska göra annars?
Om ditt mål är att skriva ut flera bokstäver efter varandra så vill du ju ackumulera dessa bokstäver innan du gör radbrytning.

Vidare är det normalt bättre att konkatenera en sträng med samtliga tecken innan du skriver ut.
Citera
2017-03-01, 15:15
  #9
Medlem
Tack Tobes för hjälpen.
Funkar helt perfekt!
Citera
2017-03-02, 11:52
  #10
Medlem
Jag försökte göra en annan lösning utan StringBuilder, men då var jag inte lika framgångsrik.
Är det någon som kan se var felet ligger? Det blir ju inga bokstäver utskrivna utan endast deras resp siffervärde.: 65 för A, 66 för B osv.

Kod:
import java.util.Scanner;
public class TestarIgen {
	
public static void main(String[] args) {
	System.out.println("Ange längden för de två sidorna i den rätvinkliga triangeln. ");
	java.util.Scanner scan = new java.util.Scanner (System.in);
		
	int tal1 = scan.nextInt();
	int tal2 = tal1 - 1;
	
	int i = 0;
	int j = 'A';
	char letter = (char)(j + 'A');
	
		for (i = 1; i <=tal2+'A'; i++)
			{
			for (j = 'A'; j <= i; j++)
				System.out.print(j + " ");	
				System.out.println(letter);
			}
	}
}
Citera
2017-03-02, 15:44
  #11
Medlem
Citat:
Ursprungligen postat av bellajonna
Jag försökte göra en annan lösning utan StringBuilder, men då var jag inte lika framgångsrik.
Är det någon som kan se var felet ligger? Det blir ju inga bokstäver utskrivna utan endast deras resp siffervärde.: 65 för A, 66 för B osv.

Kod:
	
			for (j = 'A'; j <= i; j++)
				System.out.print(j + " ");	
				System.out.println(letter);
			}
j är en int, så om du vill skriva ut bokstaven behöver du casta om den till en char, testa
System.out.print((char) j + " ");
Samt, om du importerar java.util.Scanner, kan du i koden hänvisa till endast Scanner, du behöver alltså inte ha med java.util. i själva koden efter att du har importerat
__________________
Senast redigerad av Oscillation 2017-03-02 kl. 15:49.
Citera
2017-03-02, 16:16
  #12
Moderator
Neksnors avatar
Tydligen en populär uppgift. Börja här -> (FB) Den stora tråden för snabba nybörjarfrågor(Java)
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