网站搜索

if 语句 - 在 TypeScript 中将三个输入数字按升序排列


我必须用 TypeScript 编写一个程序,将 HTML 中三个输入的三个数字进行排序。这是我到目前为止所做的:

    const lego: HTMLButtonElement = document.getElementById("sorter") as HTMLButtonElement

    const z1input: HTMLInputElement = document.getElementById("zahl1") as HTMLInputElement
    const z2input: HTMLInputElement = document.getElementById("zahl2") as HTMLInputElement
    const z3input: HTMLInputElement = document.getElementById("zahl3") as HTMLInputElement

    lego.addEventListener("click", () => {

        const z1: number = Number(z1input.value);
        const z2: number = Number(z2input.value);
        const z3: number = Number(z3input.value);

        while (z1 > z2 && z1 > z3 ) {
            if (z2 > z3)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z1 + z2 + z3
            }
            if (z3 > z2)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z1 + z3 + z2
            }
            if (z2 == z3)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z1 + z2 + z3
            }

        }
        while (z2 > z1 && z2 > z1 ) {
            if (z1 > z3)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z2 + z1 + z3
            }
            if (z3 > z1)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z2 + z3 + z1
            }
            if (z1 == z3)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z2 + z1 + z3
            }

        }
        while (z3 > z1 && z3 > z2 ) {
            if (z1 > z2)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z3 + z1 + z3
            }
            if (z2 > z1)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z3 + z2 + z1
            }
            if (z1 == z2)
            {
                document.getElementById("output").innerText =
                    "Sortierte Reihenfolge:" + z3 + z1 + z3
            }

        }
    })
})

但是当我按下按钮时,我的网站就崩溃了……我的循环正确吗?

这是一个大学项目,所以我必须用循环来做。

答案#1

你并没有在任何地方改变这些数字的值。这意味着,一旦你进入其中一个 while 循环,你就会一直停留在那里,永远无法退出。

这就是你的网站崩溃的原因。

关于解决方案,你几乎没说你需要如何解决这个问题,如果要求只是使用循环,你可以实现类似选择算法的东西(有时也叫最小/最大排序)。

答案#2

循环不应该这样使用,如果你寻求帮助,你也应该报告错误日志。无论如何,我想你的网页之所以崩溃,是因为那是三个无限循环。

如果你必须用循环来做,你可以用它们来排序数字,或者就像这样打印它们:

const lego: HTMLButtonElement = document.getElementById("sorter") as HTMLButtonElement

const z1input: HTMLInputElement = document.getElementById("zahl1") as HTMLInputElement
const z2input: HTMLInputElement = document.getElementById("zahl2") as HTMLInputElement
const z3input: HTMLInputElement = document.getElementById("zahl3") as HTMLInputElement

lego.addEventListener("click", () => {

    const z1: number = Number(z1input.value);
    const z2: number = Number(z2input.value);
    const z3: number = Number(z3input.value);
    const array : number[] = [z1, z2, z3]
    array.sort()

    let index = 0
    document.getElementById("output").innerText = "Sortierte Reihenfolge: "
    while(index < array.length){
        document.getElementById("output").innerText += `${array[index]} `
        index++
    }

})