does work except for when it doesn't

This commit is contained in:
nora 2020-12-01 20:21:16 +01:00
parent a563b2be9b
commit c4cdf24376
7 changed files with 282 additions and 95 deletions

124
.idea/uiDesigner.xml generated Normal file
View file

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

View file

@ -0,0 +1,41 @@
class Calculator {
init {
var running = true
println("Welcome to the calculator, enter a mode")
while(running) {
println("sides - enter all sides | angle - enter one angle and one side | exit - exit")
when (readLine()) {
"sides" -> {
println("Enter all 3 sides, one after the other")
println("a")
val a = readLine()
println("b")
val b = readLine()
println("c")
val c = readLine()
if (a != null && b != null && c != null)
println(Triangle(a.toDouble(), b.toDouble(), c.toDouble()))
}
"angles" -> {
println("Enter the values")
println("angle name")
val aname = readLine()
println("angle value")
val angle = readLine()
println("side name")
val sname = readLine()
println("side length")
val len = readLine()
if (aname != null && angle != null && sname != null && len != null)
println(Triangle(aname, angle.toDouble(), sname, len.toDouble()))
}
"exit" -> running = false
}
}
}
}
fun main() {
Calculator()
}

110
src/main/kotlin/Triangle.kt Normal file
View file

@ -0,0 +1,110 @@
import kotlin.math.PI
import kotlin.math.asin
import kotlin.math.cos
import kotlin.math.sin
class Triangle() {
private var a = Side(0.0, "a")
private var b = Side(0.0, "b")
private var c = Side(0.0, "c")
private var alpha = Angle(0.0, "alpha")
private var beta = Angle(0.0, "beta")
private var gamma = Angle(90.0, "gamma")
init {
}
constructor(angleName: String, angleD: Double, sideName: String, side: Double) : this() {
val angle = angleD.toRadians() //thanks kotlin
when (angleName) {
"alpha" -> {
assignSides(::sin, ::cos, angle, sideName, side)
}
"beta" -> {
assignSides(::cos, ::sin, angle, sideName, side)
}
else -> {
throw IllegalArgumentException("Illegal angle $angle")
}
}
calculateAngles()
}
constructor(vararg sides: Double) : this() {
a = Side(sides[0], "a")
b = Side(sides[1], "b")
c = Side(sides[2], "c")
calculateAngles()
}
private fun assignSides(
func1: (Double) -> Double,
func2: (Double) -> Double,
angle: Double,
sideName: String,
side: Double
) {
when (sideName) {
"a" -> {
a = Side(side, "a");
c = Side(a / func1(angle), "c")
b = Side(c * func2(angle), "b")
}
"b" -> {
b = Side(side, "b")
c = Side(b / func2(angle), "c")
a = Side(c * func1(angle), "a")
}
"c" -> {
c = Side(side, "c")
a = Side(c * func1(angle), "a")
b = Side(c * func2(angle), "a")
}
}
}
private fun calculateAngles() {
alpha = Angle(asin(a.length / c.length).toDegree(), "alpha")
beta = Angle(asin(b.length / c.length).toDegree(), "beta")
gamma = Angle(180 - beta.angle - alpha.angle, "gamma")
if(gamma.angle != 90.0){
throw java.lang.IllegalArgumentException("Invalid Angles")
}
}
private fun Double.toDegree() = this * 180 / PI
private fun Double.toRadians() = this * PI / 180
override fun toString(): String {
return "Sides: $a, $b, $c Angles: $alpha $beta $gamma"
}
class Side(length: Double, name: String) {
val length = length
val name = name
operator fun times(other: Double) = this.length * other
operator fun div(other: Double) = this.length / other
override fun toString(): String {
return "$name = ${"%.2f".format(length)}"
}
}
class Angle(value: Double, name: String) {
val angle = value
val name = name
override fun toString(): String {
return "$name = ${"%.2f".format(angle)}"
}
}
}

View file

@ -1,7 +1,11 @@
import kotlin.math.*
import kotlin.reflect.KFunction
fun main() {
Calculator()
//test()
}
fun test(){
val triangle = Triangle(4.0, 3.0, 5.0)
println("alpha: a: ${Triangle("alpha", 53.13, "a", 4.0)}")
println("alpha: b: ${Triangle("alpha", 53.13, "b", 3.0)}")
@ -13,98 +17,6 @@ fun main() {
println("\nOriginal$triangle")
}
class Triangle() {
var a = Side(0.0, "a")
var b = Side(0.0, "b")
var c = Side(0.0, "c")
var alpha = Angle(0.0, "alpha")
var beta = Angle(0.0, "beta")
var gamma = Angle(90.0, "gamma")
init {
}
constructor(angleName: String, angleD: Double, sideName: String, side: Double) : this() {
val angle = angleD.toRadians() //thanks kotlin
when (angleName) {
"alpha" -> {
assignSides(::sin, ::cos, angle, sideName, side)
}
"beta" -> {
assignSides(::cos, ::sin, angle, sideName, side)
}
else -> {
throw IllegalArgumentException("Illegal angle $angle")
}
}
calculateAngles()
}
constructor(vararg sides: Double) : this() {
a = Side(sides[0], "a")
b = Side(sides[1], "b")
c = Side(sides[2], "c")
calculateAngles()
}
private fun assignSides(func1: (Double) -> Double, func2: (Double) -> Double, angle: Double, sideName: String, side: Double){
when (sideName) {
"a" -> {
a = Side(side, "a");
c = Side(a / func1(angle), "c")
b = Side(c * func2(angle), "b")
}
"b" -> {
b = Side(side, "b")
c = Side(b / func2(angle), "c")
a = Side(c * func1(angle), "a")
}
"c" -> {
c = Side(side, "c")
a = Side(c * func1(angle), "a")
b = Side(c * func2(angle), "a")
}
}
}
private fun calculateAngles() {
alpha = Angle(asin(a.length / c.length).toDegree(), "alpha")
beta = Angle(asin(b.length / c.length).toDegree(), "beta")
gamma = Angle(180 - beta.angle - alpha.angle, "gamma")
}
private fun Double.toDegree() = this * 180 / PI
private fun Double.toRadians() = this * PI / 180
override fun toString(): String {
return "Sides: $a, $b, $c Angles: $alpha $beta $gamma"
}
}
class Side(length: Double, name: String) {
val length = length
val name = name
operator fun times(other: Double) = this.length * other
operator fun div(other: Double) = this.length / other
override fun toString(): String {
return "$name = ${"%.2f".format(length)}"
}
}
class Angle(value: Double, name: String) {
val angle = value
val name = name
override fun toString(): String {
return "$name = ${"%.2f".format(angle)}"
}
}