如何调试为什么我没有从C#程序获得正确的输出?

时间:2020-03-25 18:05:04

标签: c#

我是C#的新手,但是我已经学习Java一年了,发现C#几乎相似。我正在尝试制作一个输出像这样的程序

My 
My Name
My Name Is
My Name Is Ahan

我写的程序是这个


class Program
{
    static void Main(string[] args)
    {
        string str1 = "My Name Is Ahan";
        int i = 0 , length = str1.Length;
        Console.WriteLine(length);

        for(; i<length; i++ )
        {
            char ch = str1[i];

            if (ch == ' ')
            {
                int catchnum = str1.IndexOf(ch);

                string displayValue = str1.Substring(0, catchnum);
                Console.WriteLine(displayValue);
            }
            else;

        }
        Console.ReadLine();
    }
}

2 个答案:

答案 0 :(得分:2)

像这样吗?

from pyspark.sql import functions as F
df.withColumn("cols", F.explode(F.arrays_zip(F.array("score", "tx_amount", "isValid", "greeting")))) \
        .select("id", F.col("cols.*")) \
        .withColumnRenamed("0", "col_value")\
        .withColumn("text", (F.regexp_extract(F.col("col_value"),"([A-Za-z]+)",1)))\
        .withColumn("boolean", F.when((F.col("text")=='true')|(F.col("text")=='false'),F.col("text")).otherwise(F.lit("")))\
        .withColumn("text", F.when(F.col("text")==F.col("boolean"), F.lit("")).otherwise(F.col("text")))\
        .withColumn("numeric", F.regexp_extract(F.col("col_value"),"([0-9]+)",1))\
        .withColumn("is_text", F.when(F.col("text")!="", F.lit("Y")).otherwise(F.lit("N")))\
        .withColumn("is_score", F.when(F.col("numeric")<=1, F.lit("Y")).otherwise(F.lit("N")))\
        .withColumn("is_amount", F.when(F.col("numeric")>1, F.lit("Y")).otherwise(F.lit("N")))\
        .withColumn("is_boolean", F.when(F.col("boolean")!="", F.lit("Y")).otherwise(F.lit("N")))\
        .select("id", "col_value","is_score","is_amount","is_boolean","is_text").show()


+---+------------+--------+---------+----------+-------+
| id|   col_value|is_score|is_amount|is_boolean|is_text|
+---+------------+--------+---------+----------+-------+
|  1|         0.2|       Y|        N|         N|      N|
|  1|       23.78|       N|        Y|         N|      N|
|  1|        true|       N|        N|         Y|      N|
|  1| hello_world|       N|        N|         N|      Y|
|  2|         0.6|       Y|        N|         N|      N|
|  2|       12.41|       N|        Y|         N|      N|
|  2|       false|       N|        N|         Y|      N|
|  2|byebye_world|       N|        N|         N|      Y|
+---+------------+--------+---------+----------+-------+

答案 1 :(得分:1)

我认为您的问题在这里:

int catchnum = str1.IndexOf(ch);

在循环中,您总是会找到 first 空间的索引。找到时,您已经拥有当前当前空间的索引,因此您可以执行以下操作:

if (ch == ' ')
{
    string displayValue = str1.Substring(0, i);
    Console.WriteLine(displayValue);
}

我还要指出,对于这些基本操作,C#和Java非常相似-相同的代码在Java中的行为相同,只是语法略有不同。当然,通过使用一些基本库函数(例如string.Split和Linq),代码可能会更简单,这两个平台之间有所不同,但这不是问题所在。

换句话说,您的错误不是由于Java和C#之间的转换而引起的-它们是在任何编程语言中都会表现出来的基本逻辑错误。