package com.kamical.desgin.model;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
/**
* https://github.com/Ruegg/ElementConfiguration/blob/master/Java%20Source/src/ruegg/andre/OrbitalDiagram.java
* @author kmandal
*
*/
public class ElectronConfiguration {
public static LinkedHashMap<String, Integer> orbital = new LinkedHashMap<String, Integer>();
static String[] energyLevels = { "1s", "2s", "2p", "3s", "3p", "4s", "3d",
"4p", "5s", "4d", "5p", "6s", "4f", "5d", "6p", "7s", "5f", "6d",
"7p", "8s", "6f", "7d", "8p", "9s", "7f", "8d", "9p", "10s", "8f",
"9d", "10p", "11s" };
private static String getElectronConfiguration(int atomicNumber) {
int countElectron = 0;
int remainingElectorn = atomicNumber;
for (String string : energyLevels) {
String block = string.substring(1);
if (atomicNumber > countElectron) {
int blockData=getOrbitalValue(block);
if (remainingElectorn > blockData) {
orbital.put(string, blockData);
countElectron += blockData;
remainingElectorn = atomicNumber - countElectron;
} else {
orbital.put(string, remainingElectorn);
countElectron += remainingElectorn;
remainingElectorn = atomicNumber - countElectron;
break;
}
}
}
StringBuffer sb = new StringBuffer();
int count=1;
for (Entry<String, Integer> entry : orbital.entrySet()) {
if(orbital.size()>count){
sb.append(entry.getKey() + entry.getValue()).append(',');
count++;
}else{
sb.append(entry.getKey() + entry.getValue());
}
}
return sb.toString();
}
public static int getOrbitalValue(String orbitalPath) {
switch (orbitalPath) {
case "s":
return 2;
case "p":
return 6;
case "d":
return 10;
case "f":
return 14;
}
return 0;
}
public static void main(String s[]) {
int atomicNumber = 81;
String electronConfiguration = getElectronConfiguration(atomicNumber);
System.out.println(electronConfiguration);
}
}
1s2,2s2,2p6,3s2,3p6,4s2,3d10,4p6,5s2,4d10,5p6,6s2,4f14,5d10,6p1
If you find this post helpful, I would really appreciate if you can share it with your friends. Also you can check more questions and analysis here.