命名空间问题(缺少}?)并将params传递给显示数组的方法

时间:2015-05-07 15:30:29

标签: c# console.writeline params-keyword

我的代码有两个问题:

1-我在Main()中使用Console.Writeline获得了奇怪的语法错误,我认为我缺少右大括号'}'

2-我似乎无法在Main()之后找出我的第一个方法。它应该是一个简单的void方法来编写数组的元素,但Visual Studio似乎认为它是错误的类或命名空间。

有人能发现我搞砸了吗?

public static void Main(string[] args)
{
    //static array for winning[6], empty for player[6], empty for matching[6]
    int [] winning = new int [6] {2, 4, 6, 9, 1, 3};
    int [] player = new int [6];
    int [] matching = new int [6];
    int inValue;

    //Input loop
    Console.WriteLine("Please enter six lotto numbers, between 1 and 9");

    for (int i = 0; i < player.Length; i++)
    {
        inValue = Console.Read();
        if (inValue < 1 || inValue > 9) //Validate for int 1-9
        {
            Console.WriteLine("Please enter a whole number between 1 and 9");
        }
        winning[i] = inValue;
    }

    //Output
    Console.WriteLine("The winning numbers were:");
    DisplayArray(int[] winning);
    Console.WriteLine("Your numbers were:");
    DisplayArrayContents(int[] player);
    Console.WriteLine("You had " + MatchCount() + " matches.");
    Console.WriteLine("Your matching numbers are:")
    DisplayArrayContents(int[] matching);
    Console.Read();
}

//Empty method to display arrays
static void DisplayArray(params int[] args)
{
    for (int i = 0; i < args.Length; i++)
    {
        Console.Write({0} + "\t", array[i]);
    }
    Console.Write("\n");
} 

编辑:谢谢大家!我忘记在那里重命名一些变量和方法,但主要问题是缺失;和不必要的数据类型作为Main()中的参数。

3 个答案:

答案 0 :(得分:3)

清理语法错误有几点:

1 - 显示数组中的值&#34; args&#34; (这是作为参数传递给方法签名中的DisplayArray),更改&#34; array [i]&#34;到&#34; args [i]&#34;。

  <util:list id="test" scope="prototype" value-type="CommonInterfaceOfBeans">
        <ref bean="bean1ClassName"/>
        <ref bean="bean2ClassName"/>
        <ref bean="bean3ClassName"/>
        <ref bean="bean4ClassName"/>
        <ref bean="bean5ClassName"/>
    </util:list>

2 - 调用DisplayArray时,您只需要传入要在该方法中操作的数组实例,因此请更改以下调用:

@Service
public class Service {

public void run() {
List<CommonInterfaceOfBeans> handlers= lookUp();   
handlers.get(0).doSomething();
}

  @Lookup(value = "test")
    protected List<CommonInterfaceOfBeans> lookUp() {
        return null; //This gets replaced with list by Spring via cglib.
    }

为:

static void DisplayArray(params int[] args)
{
    for (int i = 0; i < args.Length; i++)
    {
        Console.Write("{0}\t", args[i]);
    }
    Console.Write("\n");
} 
祝你好运!

<强>更新

这是一个工作原型:

DisplayArray(int[] winning);
DisplayArrayContents(int[] player);

答案 1 :(得分:2)

//Empty method to display arrays
static void DisplayArray(params int[] args)

这应该是static void DisplayArray(int[] array),因为您无论如何都要在数组中传递,并且不需要varargs的性能损失(这是您在声明参数时所执行的操作)为params int[] args

Console.Write({0} + "\t", array[i]);

您不会像这样将格式字符串连接在一起。你可以使用:

Console.Write("{0}\t", array[i]); 

此外,array未在您的实施的DisplayArray()内定义。您已将参数命名为args

DisplayArrayContents(int[] matching);

您没有DisplayArrayContents方法,并且您不需要指定您再次传入的内容的类型。编译器可以在调用时保证类型安全,因此您只需按名称传递它,

DisplayArray(matching);

在这里缺少分号:

Console.WriteLine("Your matching numbers are:")

在你的输入循环中,你正在将玩家输入写入winning数组,这意味着他们最终会总是选择中奖号码,因为他们只是将它们放入。

您可能想要player[i] = inValue;

inValue = Console.Read()

做您可能期望的事情。尝试使用以下程序:

var inValue = Console.Read();
Console.WriteLine(inValue);

并在控制台输入1.您将获得与1不同的输出,因为Console.Read()返回char值。

Console.ReadLine()Int32.Parse()String.Split()的组合将为您提供所需的信息。

答案 2 :(得分:0)

调用方法时,不应将类型与参数一起传递。例如,DisplayArray(int[] winning);应该只是DisplayArray(winning);修复所有这些错误,你应该没问题。