我正在查看8u40-b25 JDK类String的源代码,它包含一个scan: {}块:
2557 /* Now check if there are any characters that need to be changed. */
2558 scan: {
2559 for (firstUpper = 0 ; firstUpper < len; ) {
2560 char c = value[firstUpper];
2561 if ((c >= Character.MIN_HIGH_SURROGATE)
2562 && (c <= Character.MAX_HIGH_SURROGATE)) {
2563 int supplChar = codePointAt(firstUpper);
2564 if (supplChar != Character.toLowerCase(supplChar)) {
2565 break scan;
2566 }
2567 firstUpper += Character.charCount(supplChar);
2568 } else {
2569 if (c != …Run Code Online (Sandbox Code Playgroud) 在程序(Java)中,我需要检查并行端口中的特定引脚.每当该引脚从逻辑0变为1(正边沿时钟)时,我必须读取端口上的数据并保存它.这种情况大约每10毫秒发生一次,但可能会有所不同.
为了做到这一点,我用一个不断检查端口的while循环创建了一个单独的线程,但这使得处理器变得疯狂,我知道这是因为while循环.我的问题是,如何在不使用处理器密集的while循环的情况下不断扫描端口?该程序并不准确知道何时发生引脚更改,只是它发生在每10ms左右.
基本上,我试图做一个while循环,并继续阅读,直到线输入是$.当读取它时,循环应该退出.
但是我得到一个运行时异常java.util.InputMismatchException.
这是代码:
while (scan.nextLine() != "$") {
temp1 = scan.nextInt();
temp2 = scan.nextInt();
addEdge(temp1, temp2);
}
Run Code Online (Sandbox Code Playgroud) 这似乎几乎是正确的,但它在换行线上窒息.最好的方法是什么?
package main
import (
"fmt"
"strings"
)
func main() {
var z float64
var a []float64
// \n gives an error for Fscanf
s := "3.25 -12.6 33.7 \n 3.47"
in := strings.NewReader(s)
for {
n, err := fmt.Fscanf(in, "%f", &z)
fmt.Println("n", n)
if err != nil {
break
}
a = append(a, z)
}
fmt.Println(a)
}
Run Code Online (Sandbox Code Playgroud)
输出:
n 1
n 1
n 1
n 0
[3.25 -12.6 33.7]
Run Code Online (Sandbox Code Playgroud)
更新:
请参阅下面@Atom的答案.我找到了另一种方法,如果错误是EOF就会中断,否则只是忽略它.我知道,这只是一个黑客,但我控制着源头.
_, err := fmt.Fscanf(in, "%f", &z)
if err …Run Code Online (Sandbox Code Playgroud) 我正在使用内存扫描仪,但扫描速度很慢..任何人都可以帮我改进吗?
procedure FirstScan(scantype, scanvalue: string);
var
value :integer;
dwEndAddr : dword;
i:dword;
mbi : TMemoryBasicInformation;
begin
while (VirtualQuery(Pointer(DWORD(mbi.BaseAddress) + MBI.RegionSize), MBI, SizeOf(MEMORY_BASIC_INFORMATION))=SizeOf(TMemoryBasicInformation)) do begin
if (MBI.State = MEM_COMMIT) and (MBI.Protect = PAGE_READWRITE) then begin
dwEndAddr := DWORD(mbi.BaseAddress) + MBI.RegionSize;
for i := DWORD(MBI.BaseAddress) to (dwEndAddr - 1 - sizeof(DWORD)) do begin
Application.ProcessMessages;
try
if scantype = '1 Byte' then begin
value := PBYTE(i)^;
if scanvalue = IntToStr(value) then ListBox1.Items.Add(IntToHex(i,8));
end;
//others scantypes here...
except
Break;
end;
end;
end;
end;
end; …Run Code Online (Sandbox Code Playgroud) 使用此代码,我猜扫描更快,但扫描始终返回SAME地址.
例如:
00123456
00124567
00135478
00145893
00123456 //start repeat
00124567
00135478
00145893
00123456 //start repeat
00124567
00135478
00145893
Run Code Online (Sandbox Code Playgroud)
这是我的程序:
procedure SCANBYTE(value: integer);
var
lpflOldProtect: dword;
s: size_t;
mbi: MEMORY_BASIC_INFORMATION;
SI: SYSTEM_INFO;
lpStartAddress, lpStopAddress: dword;
addr: dword;
i: dword;
begin
GetSystemInfo(si);
lpStartAddress := dword(SI.lpMinimumApplicationAddress);
lpStopAddress := dword(SI.lpMaximumApplicationAddress);
for addr := lpStartAddress to lpStopAddress do begin
S:= VirtualQuery(Pointer(addr), MBI, SizeOf(MEMORY_BASIC_INFORMATION));
if (S=SizeOf(MEMORY_BASIC_INFORMATION)) and (MBI.State = MEM_COMMIT) and (MBI.Type_9 = MEM_PRIVATE) and (MBI.RegionSize>0) and (MBI.Protect = PAGE_READWRITE) then begin
for i := dword(MBI.BaseAddress) …Run Code Online (Sandbox Code Playgroud) 在用C++编程几个月后,进入中级水平后,我决定开始学习Java.我在扫描变量的工作原理方面遇到了一些麻烦.在C++中,"cin >>"非常简单,因为它可以将输入存储到先前声明的变量中.但是,在Java中,变量本身就是扫描仪?这是如何运作的?另外,在告诉扫描仪存储变量的位置后,有".nextDouble"的目的是什么?我是从教程中学到的,下面是我的代码.
import java.util.Scanner;
class calculator {
public static void main(String args[]) {
Scanner var = new Scanner(System.in);
double fnum, snum, answer;
System.out.println("Enter first number: ");
fnum = var.nextDouble();
System.out.println("Enter second number: ");
snum = var.nextDouble();
answer = fnum+snum;
System.out.println(answer);
}
}
Run Code Online (Sandbox Code Playgroud) 我试图检测时间格式是12小时/ 24小时格式.基于此我在日历中设定时间.
我使用以下代码在viewDidLoad方法中检测设备上的24小时格式.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
Run Code Online (Sandbox Code Playgroud)
之后,我检查如下
if (is24h == TRUE) {
} else {
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到is24h值是假的.如果设备设置为12小时格式,我可以在日历中设置时间.但如果是24小时格式,我无法设定时间.
你能告诉我我需要改变的地方吗?
我偶然发现了这个贴:
int main() {
return!!!~!!!!!~!!!1??!??!1?
"^_^" <:3
]: "^.-"
<: 0.0
<3 :> ;}
Run Code Online (Sandbox Code Playgroud)
一个可爱的表情符号集合,据称返回null.C-fu比我更好的人解释它是如何工作的吗?
我正在尝试扫描SD卡中的所有.mp3文件并保存其名称.这是一个代码片段,负责这一点.我做错了什么?1.哪个是SD卡/ mnt/sdcard或/ SD卡的正确路径?
public class PlayerActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.player_activity);
}
public class SongsManager
{
// SDCard Path
//final String MEDIA_PATH = new String(MediaStore.Audio.Media.getContentUri("external").toString());
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
public SongsManager()
{
}
public ArrayList<HashMap<String, String>> getPlayList()
{
// File home = new File(MEDIA_PATH);
File home = Environment.getExternalStorageDirectory();
if (home.listFiles(new FileExtensionFilter()).length > 0)
{
for (File file : home.listFiles(new FileExtensionFilter()))
{
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle", file.getName().substring(0, (file.getName().length() …Run Code Online (Sandbox Code Playgroud)