forked from jean/GDP-Uebungen
		
	Aufgabe 2 fin
This commit is contained in:
		
							parent
							
								
									ff7d904cab
								
							
						
					
					
						commit
						888399464e
					
				| @ -1,5 +1,6 @@ | ||||
| package Uebungen.Uebung5; | ||||
| 
 | ||||
| import java.awt.desktop.SystemSleepEvent; | ||||
| import java.util.Scanner; | ||||
| import java.lang.Character; | ||||
| import java.util.Arrays; | ||||
| @ -19,51 +20,73 @@ public class Aufgabe2 { | ||||
|         Scanner scanner = new Scanner(System.in); | ||||
|         System.out.print("Enter desired string: "); | ||||
|         char[] stringAsCharArr = scanner.nextLine().toCharArray(); | ||||
|         char[] usedCharArr = usedChars2(stringAsCharArr); | ||||
|         for(char character:usedCharArr) System.out.println(" \""+ character + "\""); // Debug | ||||
|         // System.out.println(stringAsCharArr.hashCode()); // Get the hashcode of the array | ||||
|         stringAsCharArr = normalize(stringAsCharArr); | ||||
|         char[] usedCharArr = usedChars(stringAsCharArr); | ||||
|         int[]  charAmountArr = countChars(usedCharArr ,stringAsCharArr); | ||||
|         histogramm(20,usedCharArr, charAmountArr); | ||||
|     } | ||||
| 
 | ||||
|     public static char[] usedChars(char[] charArray){ | ||||
|         char[] workingArray = new char[charArray.length]; | ||||
|         int position = 0; // current position | ||||
|         for(char currChar:charArray) { | ||||
|             currChar=Character.toLowerCase(currChar); //normalize | ||||
|             boolean exists=false; | ||||
|             for(char targetChar:workingArray) if(targetChar==currChar) exists=true; | ||||
|             if(!exists){ | ||||
|                 workingArray[position]=currChar; | ||||
|                 position++; | ||||
|             } | ||||
|         } | ||||
|         char[] targestArray = new char[position]; | ||||
|         for(int i=0;i<position;i++) targestArray[i] = workingArray[i]; | ||||
|         Arrays.sort(targestArray); | ||||
|         return targestArray; | ||||
|     public static char[] normalize(char[] workerArray){ | ||||
|         for(int i=0; i<workerArray.length;i++) | ||||
|             workerArray[i]=Character.toLowerCase(workerArray[i]); | ||||
|         return workerArray; | ||||
|     } | ||||
|     // Improved function: less code, less demanding | ||||
|     public static char[] usedChars2(char[] workingArray){ | ||||
| 
 | ||||
|     public static void histogramm(int width, char[] availableChars, int[] charAmount){ | ||||
|         int max = maximum(charAmount); | ||||
|         for(int i=0;i<availableChars.length;i++) { | ||||
|             System.out.print("\""+availableChars[i]+"\": "); | ||||
|             if(max>width) | ||||
|                 for(int j=0;j<scale(charAmount[i],max,width);j++) System.out.print("#"); | ||||
|             else | ||||
|                 for(int j=0;j<charAmount[i];j++) System.out.print("#"); | ||||
|             System.out.println("x"+charAmount[i]); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
|     public static int scale(int value, int oldMax, int newMax){ | ||||
|         double calc = (double) value/oldMax*newMax; | ||||
|         return (int) calc; | ||||
|     } | ||||
| 
 | ||||
|     public static int maximum(int[] inputArray){ | ||||
|         int largestNumber = inputArray[0]; | ||||
|         for(int i=1;i<inputArray.length;i++) | ||||
|             if(inputArray[i]>largestNumber) | ||||
|                 largestNumber = inputArray[i]; | ||||
|         return largestNumber; | ||||
|     } | ||||
|     public static int[] countChars(char[] availableChars, char[] scannedArray){ | ||||
|         int[] occurrences = new int[availableChars.length]; | ||||
|         // Each class variable, instance variable, or array component is initialized with a default value when it is created (§15.9, §15.10) [...] For type int, the default value is zero, that is, 0. | ||||
|         for(char currChar:scannedArray) | ||||
|             for(int i=0;i<availableChars.length;i++) | ||||
|                 if(availableChars[i]==currChar) | ||||
|                     occurrences[i]++; | ||||
|         return occurrences; | ||||
|     } | ||||
|     public static char[] usedChars(char[] inputArray){ | ||||
|         char[] workerArray = inputArray.clone(); // System.out.println(inputArray.hashCode()); // Get the hashcode of the array | ||||
|         // workingArray gets an new hashcode after modifying, so its okay using it | ||||
|         // now we remove all characters that occur multiple times | ||||
|         // we also count how many chars we got | ||||
|         int counter=0; | ||||
|         for(int i=0; i<workingArray.length;i++){ | ||||
|             if((int)workingArray[i]!=0) { | ||||
|         int counter=0; // we also count how many different chars we found | ||||
|         for(int i=0; i<workerArray.length;i++){ | ||||
|             if((int)workerArray[i]!=0) { //there is no need to run if the char is already the null character | ||||
|                 counter++; // found a new one -> increment counter | ||||
|                 // now remove all similar chars from that point till the end of the array | ||||
|                 for (int j = i + 1; j < workingArray.length; j++) { | ||||
|                     if (workingArray[i] == workingArray[j]) workingArray[j] = (char) 0; // set the char to 	"Null character" | ||||
|                 } | ||||
|                 for (int j = i + 1; j < workerArray.length; j++) // loop through starting from current pos. | ||||
|                     if (workerArray[i] == workerArray[j])  // check if char already exists | ||||
|                         workerArray[j] = (char) 0; // set the char to 	"Null character" | ||||
|             } | ||||
|         } | ||||
|         char[] targetArray = new char[counter]; // create new | ||||
|         int targetPosition = 0; // initiate counter for the Target Array | ||||
|         for(char currChar:workingArray){ // seek through all chars | ||||
|         for(char currChar:workerArray) // seek through all chars | ||||
|             if((int)currChar!=0){ // if its not a null character it is a new char | ||||
|                 targetArray[targetPosition] = currChar; // add the current char | ||||
|                 targetPosition++; // we added a new char, so we need to increment for the next one | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return targetArray; | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user