我是Java中的菜鸟,是在python之后学习Java的人.无论如何,我很难搞清楚这一点.假设我有班级
class Bicycle{
....
}
Run Code Online (Sandbox Code Playgroud)
和
public class Bicycle{
....}
Run Code Online (Sandbox Code Playgroud)
有什么不同.那怎么样?
public static class Bicycle{
// if this can be a valid class def in first place
}
Run Code Online (Sandbox Code Playgroud)
然后,在此之后..让我们谈谈变量.
class Bicycle{
int Gear or public int Gear // whats the difference
}
Run Code Online (Sandbox Code Playgroud)
什么时候使用哪一个?
我试图了解Python OOP中的最佳实践.
我非常熟悉Java风格的工作流程:
我喜欢它的是它在我看来提高了可读性:通过简短地查看属性,你就可以确切地知道你将在课堂上工作.
我想在Python中实现相同的结果,虽然我知道在Python中没有"变量声明"这样的东西,但也许某种设计模式可以做同样的事情.
到目前为止,我的中间解决方案是在__init__方法内部"声明" ,其中:
def __init__(self):
self.attribute1 = None
self.attribute2 = None
Run Code Online (Sandbox Code Playgroud)
并在后续方法中稍后实例化这些元素.但我发现它相当丑陋,我会很高兴听到一个更优雅的模式.
抱歉,这是个愚蠢的问题,但我不得不问这个。我有一个运行数十亿次计算的程序,我正在努力让它运行得更快。在我的程序中,我声明了很多用于中间计算的变量。例如,在伪代码中:
public bool FunctionThatGetsCalledInMain(manyparameters)
{
for (int i = 0; i < 10000000; i++)
{
int x = bigFunctionThatReturnsAnInt(i,manyparameters)
double y = bigFunctionThatReturnsADouble(i,manyparameters)
string z = bigFunctionThatReturnsAString(i,manyparameters)
bool b = someFunctionOfXYZ(x,y,z)
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以通过执行以下操作来提高性能:
public bool FunctionThatGetsCalledInMain(manyparameters)
{
for (int i = 0; i < 10000000; i++)
{
bool b = someFunctionOfXYZ(bigFunctionThatReturnsAnInt(i,manyparameters),bigFunctionThatReturnsADouble(i,manyparameters),bigFunctionThatReturnsAString(i,manyparameters))
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这看起来很可怕,我的直觉告诉我这并不重要,但我只是想看看其他人是否同意。
假设我声明了以下变量:
int num;
num = 0;
int main(void)
{
/* ... */
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
编译器会抱怨num未声明,并且默认输入int.当我一步到位时,这不会发生:
int num = 0;
Run Code Online (Sandbox Code Playgroud)
或者如果我将作业转移到main():
int main(void)
{
num = 0;
/* ... */
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
我曾经读过这种行为的解释,但我再也找不到了.有人可以再次更新我.
我正在编译
gcc -std=c11 -O2 -g -pedantic -Wall -c -fmessage-length=0 -v
Run Code Online (Sandbox Code Playgroud) 在C++中,建议在主程序内部或其他地方之前声明全局变量?我的意思是,有什么区别
#include <iostream>
int variable;
int main()
{ //my program
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
#include <iostream>
int main()
{
int variable;
//my program
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在哪种情况下我应该使用哪一个?
我有一个带有简短变量声明的简单程序:
short int v=0XFFFD;
printf("v = %d\n",v);
printf("v = %o\n",v);
printf("v = %X\n",v);
Run Code Online (Sandbox Code Playgroud)
结果是:
v = -3 ; v = 37777777775 ; v = FFFFFFFD
Run Code Online (Sandbox Code Playgroud)
我不明白如何计算这些值。我知道一个短变量可以保存 -32768 和 32767 之间的值,而值 0XFFFD 会导致溢出,但我不知道如何计算确切值,在这种情况下为 -3。
另外,如果我的声明是 v=0XFFFD 为什么输出 v=%X 是 FFFFFFFD?
我实际上有一个嵌套的问题:
例如,这个程序是:
PROGRAM order1
IMPLICIT NONE
DOUBLE PRECISION,DIMENSION(:,:),ALLOCATABLE:: array_double_2D
DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE:: array_double_1D
INTEGER,DIMENSION(:),ALLOCATABLE:: array_int_1D
INTEGER :: int1,int2
LOGICAL :: boolean1,boolean2
... instructions ...
Run Code Online (Sandbox Code Playgroud)
比这更好:
PROGRAM order2
IMPLICIT NONE
LOGICAL :: boolean1,boolean2
INTEGER :: int1,int2
INTEGER,DIMENSION(:),ALLOCATABLE:: array_int_1D
DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE:: array_double_1D
DOUBLE PRECISION,DIMENSION(:,:),ALLOCATABLE:: array_double_2D
... instructions ...
Run Code Online (Sandbox Code Playgroud)
?
(通过"更好",我的意思是有效的内存管理和更快)
谢谢你的回答!
下面是一个包含3个嵌套循环的代码.变量curs和tempv在最外层for循环的每次迭代中被重新声明.这应该给我错误,但我能够成功运行它没有错误的gcc 4.8.4.
for(int i = 0; i<lend; i++)
{
string curs = vstring[digits[i]-'0'];
vector<string> tempv;
for(int j = 0; j<v.size(); j++)
{
for(int k = 0; k<curs.size(); k++)
{
tempv.push_back(v[j] + curs[k]);
}
}
v = tempv;
}
Run Code Online (Sandbox Code Playgroud)
在for-loop中重新声明变量是否可以?我理解在C++中,变量不能在同一范围内重新声明.
我正在使用制作一个简单的高分系统代码 - Codecall,但我在使用它时收到错误.导致问题的一行是在HighScoreManager()课堂内.
这是错误的代码:
public String getHighscoreString() {
String highscoreString = "";
Static int max = 10; // this line gives an error
ArrayList<Score> scores;
scores = getScores();
int i = 0;
int x = scores.size();
if (x > max) {
x = max;
}
while (i < x) {
highscoreString += (i + 1) + ".\t" + scores.get(i).getNaam() + "\t\t" + scores.get(i).getScore() + "\n";
i++;
}
return highscoreString;
}
Run Code Online (Sandbox Code Playgroud)
线路Static int max = 10; …
我想在多个 if-else 分支中初始化一个变量,稍后使用它,基本上是这样的:
Foo foo;
if (someCondition) {
std::string someString = getTheString();
// do some stuff
foo = Foo(someString);
} else {
int someInt = getTheInt();
//do some other stuff maybe
foo = Foo(someInt);
}
// use foo here
Run Code Online (Sandbox Code Playgroud)
不幸的是,在这个例子中,类型Foo有一个删除的默认构造函数,所以上面的代码不能编译。有没有办法以这种方式初始化这样的变量?
编辑:
正如您在我的示例中看到的那样,我使用了不同的构造函数,并且还在 if/else 块中执行了其他操作,因此不幸的是,三元运算符不起作用。
如果没有办法,没有foo指针,我显然可以采取不同的方法,但我很好奇,如果我的方法以某种方式起作用。
为什么以下代码会产生错误?我不明白为什么花括号会有所作为.
#include<stdio.h>
int main(void)
{
{
int a=3;
}
{
printf("%d", a);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在由静态数据字段引起的消费者文件中询问C++ Error链接之后,我为StateConservator的一个实例尝试了两种不同的声明:
StateConservator cs(*pContainer, pDoc->GetConfiguration());
Run Code Online (Sandbox Code Playgroud)
和
StateConservator(*pContainer, pDoc->GetConfiguration());
Run Code Online (Sandbox Code Playgroud)
第一个做了我想要的,它只在范围结束后才传递析构函数.第二个在声明本身的行中传递析构函数.
编译器是否正常运行?如果是正确的行为,在该行中声明匿名变量的方法是什么?
出于某种原因,我的程序给了我一个错误,告诉我"使用未分配的局部变量'路径'",这真是太该死了,尝试重启视觉工作室(2017社区)几次并无济于事,试图重建解决方案..没有什么是出于某种原因......
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace InterfacedStorage
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
OpenFile();
}
public void OpenFile()
{
OpenFileDialog openFile = new OpenFileDialog();
string path; // Declared path
if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
path = openFile.FileName; // Input path from a file
}
Excel excel = new Excel(path, 1); // Path is not declared...
MessageBox.Show(excel.ReadCell(0, 0));
}
}
}
Run Code Online (Sandbox Code Playgroud) c++ ×4
c ×3
c# ×2
java ×2
anonymous ×1
coding-style ×1
constructor ×1
curly-braces ×1
fortran ×1
gcc ×1
python ×1
short ×1
static ×1
syntax-error ×1
variables ×1