昨天,我花了大约4,5个小时试图弄清楚java站点上的这段代码。它接受十六进制输入并将其转换为数字。有很多方法我还没有探索过。但是在我最终理解了它之后(大喊"birdfreeyahoo"),我试着把它放到我的程序中并编译。然后我遇到了这个错误:
应为'public‘之前的非限定id
我以前做过并调用过void函数,但我还从来没有处理过类或静态函数。我一直关注的大多数教程完全依赖于设置或循环范围内的编码,因为arduino是面向初学者的。正如birdfreeyahoo提到的,getDecimal(字符串十六进制)必须在函数的开头声明,这样属性字符串十六进制才能在稍后的程序中调用以供使用。
我知道它必须与程序中类/函数的语法相关,因为我从java站点复制了代码,并且是1:1的动词(当然,只有在分解它并首先分析它之后)。
代码:
public class HexToDecimalExample3{
public static int getDecimal(String hex){
String digits = "0123456789ABCDEF";
hex = hex.toUpperCase();
int val = 0;
for (int i = 0; i < hex.length(); i++)
{
char c = hex.charAt(i);
int d = digits.indexOf(c);
val = 16*val + d;
}
return val;
}
}
这与我在程序中的其他更简单的函数一起抛出,并在void setup(){}之前实现
对于我的整个程序和它现在的位置(供参考):
//由于套件中提供的LED,我们被迫使用一些变通方法来使RGB在公共阳极LED上工作。最初的课程材料是针对普通阴极的。
class test{
public static void main(string[] args){
int LEDPower = 8;
int redPin = 6;
int greenPin = 5;
int bluePin = 3;
int voltInput;
String colorChoice;
//FUNCTIONS FOR SIMPLER IMPLIMENTATION
void redColor (){
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
}
void greenColor (){
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
}
void blueColor (){
analogWrite (redPin, 255);
analogWrite (greenPin, 255);
analogWrite (bluePin, 0);
}
public class HexToDecimalExample3{
public static int getDecimal(String hex){
String digits = "0123456789ABCDEF";
hex = hex.toUpperCase();
int val = 0;
for (int i = 0; i < hex.length(); i++)
{
char c = hex.charAt(i);
int d = digits.indexOf(c);
val = 16*val + d;
}
return val;
}
}
void setup() {
Serial.begin (2000000);
pinMode (LEDPower, OUTPUT);
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (bluePin, OUTPUT);
digitalWrite (LEDPower, HIGH);
}
/*
for (int j=1; j<3; j+1){
redColor();
delay(100);
greenColor();
delay(100);
blueColor();
delay(100);
}
*/
}
void loop() {
Serial.println("What Color Would You Like (HEX COLORS #RRGGBB)?");
while (Serial.available()==0);{
}
colorChoice = Serial.readString();
colorChoice.trim();
Serial.println("Decimal of " + colorChoice + "is: " +getDecimal(colorChoice));
if (colorChoice=="red"){
redColor();
}
if (colorChoice=="green"){
greenColor();
}
if (colorChoice=="blue"){
blueColor();
}
//THROW EXCEPTION IF NOT VALID
/*
if (colorChoice != "red" && colorChoice != "green" && colorChoice!= "blue"){
Serial.println("");
Serial.println("That is not a valid choice");
Serial.println("");
}
*/
/*
if (strstr(colorChoice, "red") != NULL){
Serial.println("applying...");
delay(1000);
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
}
*/
}
}
}
发布于 2018-10-07 08:30:07
问题是您已经将整个HexToDecimalExample3
类复制并粘贴到main
方法的中间。
这是无效的。你不能在这样的方法中间嵌入一个公共类。
回到您的Java教科书或教程,阅读有关Java类的结构、如何声明方法、如何调用方法等内容。这将帮助你理解你应该做什么。
这里是一个开始学习的好地方:
提示:将getDecimal方法放在 main方法之前,并去掉虚假的HexToDecimalExample3
类声明。
https://stackoverflow.com/questions/52684100
复制相似问题