我有一个游戏,我想计算一个玩摇滚纸剪刀的玩家对计算机的输赢(C++的随机数函数).为了跟踪玩家的胜利,损失以及与计算机的关系,我创建了这个结构(这是全局的):
struct human{
short wins = 0;
short losses = 0;
short ties = 0;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试使用short结构中的一个变量进行数学运算时会出现问题:
int main(){
short totalPlays = 1;
float winsPerc;
outcome(totalPlays, winsPerc);
}
void outcome(short totalPlays, float& winsPerc){
winsPerc = (static_cast<float>(human.wins) / static_cast<float>(totalPlays))* 100;
}
Run Code Online (Sandbox Code Playgroud)
在这两个函数中,我试图计算玩家获胜的百分比.但是,我的编译器似乎human将human.wins变量的一部分解释为一个类型.所以当然我试图改变human.wins到short human.wins无济于事.之后,编译器只表示类型short是意外的.由于这是如此模糊,我真的不知道我做错了什么.任何帮助将非常感谢!
开发Java Android应用程序,但我认为这是一个直接的Java问题.
我有List声明如下;
List list= new ArrayList<String[]>();
Run Code Online (Sandbox Code Playgroud)
我想在循环中提取每个String [];
for(int i=0; i < list.size(); i++) {
//get each String[]
String[] teamDetails = (String[])list.get(i);
}
Run Code Online (Sandbox Code Playgroud)
这个错误,我猜它只是不喜欢我像这样投射String [].
任何人都可以建议从我的列表中提取String []的方法吗?
在FileStream中设置位置时遇到了一个奇怪的错误:"需要非负数.参数名称:值".
public string this[Int64 index]
{
get
{
Byte n = Convert.ToByte(0);
Byte[] Buffer = new Byte[255];
mem.Position = (int)(index * 256); //Error occurs here
mem.Read(Buffer, 0, Buffer.Length);
Buffer = (from b in Buffer where b != n select b).ToArray();
return System.Text.Encoding.Default.GetString(Buffer);
}
set
{
mem.Position = (int)(index * 256);
value += String.Concat(Enumerable.Repeat("\0", 255 - value.Length));
Byte[] Buffer = System.Text.Encoding.Default.GetBytes(value + "|");
mem.Write(Buffer, 0, Buffer.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
作为一个长期,索引的值为8,388,608并且如预期的那样(索引*256)= 2,147,483,648,但是当我将其转换为int时,我得到相同的数字,只有负数.(2,147,483,648).为什么会这样?
目标框架是.NET 4,应用程序是为"任何CPU"构建的.
背景
如果有人想知道这段代码的用途,那么它是我写的一个模仿字符串数组的类的一部分,但是没有将值存储在内存中.MappedStringArray类允许我处理几乎任何大小的文件,而不会达到RAM的限制,因为它只知道文件中行的位置并根据需要读出它们.
在Java中我尝试将字符串值转换为整数,删除最后4个字符,所以我尝试了这样:
String filename1="98597598684.txt";
int id = Integer.parseInt(filename1.substring(0, filename1.length()-4));
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误,我不明白为什么:
java.lang.NumberFormatException: For input string: "98597598684"
at java.lang.NumberFormatException.forInputString(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
这可能很简单,但这让我疯狂1小时,任何想法?
我完全知道为什么 as不能用于值类型.但是,我所知道的唯一替代品是:
if (!(obj is MyValueType)) { // Type check #1
// Exception or whatnot
}
var myValueType = (MyValueType)obj; // Type check #2
Run Code Online (Sandbox Code Playgroud)
但是,此代码执行两次类型检查,这会产生性能成本,as而引用类型的成本相同.
我的问题:对于值类型,是否有更好的性能机制/语法?
我能想到的唯一单一类型检查机制是try/catch,但这当然具有自己的性能成本,我尽量避免基于异常的编程.
在一次采访中,有人问我对以下代码有何看法:
#include <stdio.h>
int main()
{
float f = 10.7;
int a;
a = f;
printf ("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
我回答了:
当您将a更改float为int没有强制转换时,编译器将发出警告.
int由于您没有使用演员表,因此将具有垃圾值.
然后,他们允许我在在线编译器上运行程序.我不堪重负.我的假设都是错误的.编译器没有发出任何警告,并且int值为10.即使我改变了,float如10.9或10.3这样的值,答案也是一样的.即使放一个cast也没有改变结果.
有人能告诉我为什么会发生这种情况,结果会在什么情况下有所不同.
注意:在编译时,面试官告诉我不要添加gcc标记.
编辑:现在我已经明白,浮动没有四舍五入,答案将是10.但有人可以解释我为什么这样设计?转换为int时为什么浮动,在下面四舍五入?有具体原因吗?
我的代码是:
<?php
echo((int)("??")); //Number is 19
?>
Run Code Online (Sandbox Code Playgroud)
但是,输出为0而不是19.
我有以下课程:
class MyObject { }
class MyObject2 { }
interface Parent<T>
{
void DoSomething(T myObj);
}
class Child1 : Parent<MyObject1>
{
public void DoSomething(MyObject1 myObj) { }
}
class Child2 : Parent<MyObject2>
{
public void DoSomething(MyObject2 myObj) { }
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个返回父项的工厂方法,但是我得到以下转换错误
无法将类型'Child1'隐式转换为'Parent'.存在显式转换(您是否错过了演员?)
static Parent<object> Factory()
{
return new Child1();
}
Run Code Online (Sandbox Code Playgroud)
这有什么解决方法吗?
我现在正在研究泛型,根据我的理解,我们使用泛型,所以我们可以避免/消除强制转换的需要,那么为什么在添加项目和链接列表时我必须进行强制转换?
public class ThisIsCode<E> implements Code{
LinkedList<E> list = new LinkedList<>();
public final void add(E... item) {
List<E> thingie = new LinkedList<>();
for (E i: item) {
thingie.add((E) item);
}
list.add((E)thingie);
}
Run Code Online (Sandbox Code Playgroud)
我也必须在这个方法中进行转换,并在数组中?我不认为我应该将项目放入数组中,所以我有点困惑.
public void addSingle(Object item) {
add((E[]) item);
}
Run Code Online (Sandbox Code Playgroud) 在实例化视图时有没有人知道投射的原因?
例如: TextView textView = (TextView) findViewById(R.id.textView);